java中大数以及高精度常用函数

使用java大数类解决问题时我们需要注意两个方面:1、不能有包名,也就是说我们要把主类放到默认的包里,如果你的代码里出现形如package cn.gov.test;这样的代码你很有可能会收获到RE

2、提交的类的类名必须为Main,如果是其他的名字你有可能收获到CE也有可能收获到WA(例如UVA)

Scanner cin=new Scanner(System.in);// 读入

一.BigInteger

import java.math.BigInteger;

BigInteger.ZERO //大整数0 BigInteger.ONE //大整数1 BigInteger.TEN //大整数10

BigInteger.valueOf(long val)//返回一个BigInteger,其值等于指定long。

public BigInteger(String val) //构造 :讲一个字符串变为BigIngeter类型的数据public BigInteger add(BigInteger val) //普通加法public BigInteger subtract(BigInteger val)//普通减法public BigInteger multiply(BigInteger val)//普通乘法public BigInteger divide(BigInteger val)//普通除法public BigInteger max(BigInteger val)//返回两个数中的最大值public BigInteger min(BigInteger val)//返回两者中的最小值public BigInteger[] divideAndRemainder(BigInteger val)//除法操作,数组的第一个元素作为除法的商,第二个元素作为除法的余数

mod(BigInteger val); //求余

gcd(BigInteger val); //求最大公约数 (以下都简写)

abs();//返回此值的绝对值

and(BigInteger val); //返回 this&val 的BigInteger

andNot(BigInteger val); //返回 this&~val 的BigInteger

bitCount(); //返回BIgInteger的二进制补码形式中与符号不同的位的数量

compareTo(BigInteger val); //将this 与val比较,大于,等于,小于分别返回1,0,-1;

doubleValue(); //将此BigInteger转换为double型返回;

getLowestSetBit();//返回此BigInteger最右端1比特的索引;

hashCode();//返回此BIgInteger的哈希码;

isProbablePrime();//判断是否为素数(true/false);

modInverse(BigInteger m);返回其值为(​ mod m)的BigInteger;

negate();返回(-this)的BigInteger;

not();// ~this

or(BIgInteger val);// 返回(this | val)

xor(BigInteger val);返回(this^val);

toString(int radix);//返回指定基数的字符串形式

shiftRight(int n);//返回(this>>n)的BigInteger

shiftLeft(int n);//返回值为(thsi<<n)的BigInteger

示例:

public class Main{
  public static void main(String[] args) {
      BigInteger bi1 = new BigInteger("123456789") ; // 声明BigInteger对象
      BigInteger bi2 = new BigInteger("987654321") ; // 声明BigInteger对象
      System.out.println("加法操作:" + bi2.add(bi1)) ; // 加法操作
      System.out.println("减法操作:" + bi2.subtract(bi1)) ; // 减法操作
      System.out.println("乘法操作:" + bi2.multiply(bi1)) ; // 乘法操作
      System.out.println("除法操作:" + bi2.divide(bi1)) ; // 除法操作
      System.out.println("最大数:" + bi2.max(bi1)) ; // 求出最大数
      System.out.println("最小数:" + bi2.min(bi1)) ; // 求出最小数
      BigInteger result[] = bi2.divideAndRemainder(bi1) ;//求出余数的除法操作
      System.out.println("商是:" + result[0] +
          ";余数是:" + result[1]) ;
  }
}

二.BigDecimal

import java.math.BigDecimal;

public BigDecimal(double val) //构造 将double表示形式转换为BIgDecimalpublic BigDecimal(int val)//同上public BigDecimal(String val)//将字符串表示形式转换为BigDecimalpublic BigDecimal add(BigDecimal augend)//普通加法public BigDecimal subtract(BigDecimal subtrahend)//普通减法public BigDecimal multiply(BigDecimal multiplicand)//普通乘法public BigDecimal divide(BigDecimal divisor)//普通除法

public BigDecimal pow(int n) //返回大数的n次幂

one.compareTo(two); //在数字上比较大小(大于,等于,小于分别返回1,0 -1);

toString()                将BigDecimal对象的数值转换成字符串。

doubleValue()          将BigDecimal对象中的值以双精度数返回。

floatValue()             将BigDecimal对象中的值以单精度数返回。

longValue()             将BigDecimal对象中的值以长整数返回。

intValue()               将BigDecimal对象中的值以整数返回。

示例:

public class Main{
public static void main(String[] args) {
System.out.println("加法运算:" + MyMath.round(MyMath.add(10.345,3.333),1)) ;
System.out.println("减法运算:" + MyMath.round(MyMath.sub(10.345,3.333),3)) ;
System.out.println("乘法运算:" + MyMath.round(MyMath.mul(10.345,3.333),4)) ;
System.out.println("除法运算:" + MyMath.div(10.345,3.333,3)) ;
}
}

BigDecimal.setScale()方法用于格式化小数点

setScale(val)表示保留val位小数,默认用四舍五入方式 setScale(val,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3 setScale(val,BigDecimal.ROUND_UP)进位处理,2.35变成2.4 setScale(val,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4

setScaler(val,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍

setScaler(val,BigDecimal.ROUND_CEILING)接近正无穷大的舍入

setScaler(val,BigDecimal.ROUND_FLOOR)接近负无穷大的舍入,数字>0和ROUND_UP作用一样,数字<0和ROUND_DOWN作用一样

setScaler(val,BigDecimal.ROUND_HALF_EVEN)向最接近的数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入.

ACM中java中BigInteger和Decimal用到的主要函数的更多相关文章

  1. http请求中java中的302和sendRedirect的区别

    ============================================================================================ getCont ...

  2. 如何在win10中Java中JDK的安装和path,classpath的环境配置

    1,第一步,不用说肯定是去下一个java JDK了.目前最新版本的java JDK应该是JDK 7.0,这个就自己去百度一下了,好多网站都可以找到.2,第二步就是安装JDK虚拟机了,按照它里面的提示一 ...

  3. 在实际开发中Java中enum的用法

    在日常项目的开发中,往往会存在一些固定的值,而且"数据集"中的元素是有限的. 例如:st_code// 一些状态机制:01-激活  02-未激活  03 -注册..等等 还有一特性 ...

  4. Java中的BigInteger在ACM中的应用

    Java中的BigInteger在ACM中的应用 在ACM中的做题时,常常会遇见一些大数的问题.这是当我们用C或是C++时就会认为比較麻烦.就想有没有现有的现有的能够直接调用的BigInter,那样就 ...

  5. ACM中Java的应用

    先说一下Java对于ACM的一些优点吧: (1) 对于熟悉C/C++的程序员来说Java 并不难学,两周时间基本可以搞定一般的编程,再用些时间了解一下Java库就行了.Java的语法和C++非常类似, ...

  6. ACM中java的使用

    ACM中java的使用 转载自http://www.cnblogs.com/XBWer/archive/2012/06/24/2560532.html 这里指的java速成,只限于java语法,包括输 ...

  7. ACM 中JAVA的应用

    原文地址:http://www.cppblog.com/vontroy/archive/2010/05/24/116233.html 先说一下Java对于ACM的一些优点吧: (1) 对于熟悉C/C+ ...

  8. ACM中java的使用 (转)

    ACM中java的使用 这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目. 1. 输入: 格式为:Scanner ...

  9. java中的大数BigInteger

    compareTo比较大小 equals比较是否相等 ,不能用== while(cin.hasNext())//等价于!=EOF n=cin.nextBigInteger();//读入一个大整数 Sy ...

随机推荐

  1. 不止面试—jvm类加载面试题详解

    面试题 带着问题学习是最高效的,本次我们将尝试回答以下问题: 什么是类的加载? 哪些情况会触发类的加载? 讲一下JVM加载一个类的过程 什么时候会为变量分配内存? JVM的类加载机制是什么? 双亲委派 ...

  2. git、git-lab学习记录

    git: 定义:分布式版本控制工具,类似SVN,区别在于SVN如果网络断了,无法进行版本控制,而git是本地进行版本控制,不多bb了,来个图吧 git常用命令: git add 文件          ...

  3. Grid表格的js触发事件

    没怎么接触过Grid插件: 解决的问题是:点击Grid表行里的内容触发js方法弹出模态框,用以显示选中内容的详细信息. 思路:给准备要触发的列加上一个css属性,通过这个css属性来获取元素并触发js ...

  4. ThreadLocal原理分析与代码验证

    ThreadLocal提供了线程安全的数据存储和访问方式,利用不带key的get和set方法,居然能做到线程之间隔离,非常神奇. 比如 ThreadLocal<String> thread ...

  5. AE10.0在Visual Studio 2012下安装没有模板(转)

    转自百度经验: VS2012中丢失ArcGIS模板的解决方法 由于ArcGIS10.0(for .NET)默认是用VS2010作为开发工具的,所以在先安装VS2012后装ArcGIS10.0 桌面版及 ...

  6. python 实现图片批量加入水印!pillow 入门实战!

    写文章的时候可以设置是否添加水印.可是,有些图片可能想加水印,有些不想加水印,该怎么办呢? 配置环境 python3 + pillow pip3 install pillow 引入库 from PIL ...

  7. echarts对柱状图进行标注,以及取消hover时的阴影

    option = { color: ['#3398DB'], tooltip : { trigger: 'axis', axisPointer : { // 坐标轴指示器,坐标轴触发有效 type : ...

  8. pyspark报错Exception: Java gateway process exited before sending its port number解决方法

    1.问题 搭建spark的python环境好后简单使用,源代码如下: 然后就给我丢了一堆错误: 2.解决办法 这里指定一下Java的环境就可以了,添加代码: import os os.environ[ ...

  9. Web渗透测试流程

    什么是渗透测试? 渗透测试 (penetration test)并没有一个标准的定义,国外一些安全组织达成共识的通用说法是:渗透测试是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法 ...

  10. Service Mesh 是新瓶装旧酒吗?

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 李云(花名: ...