java大数运用 - CSDN博客

java 大数的运用

  上周参加了icpc的邀请赛,遇到了大数。哎,没想过会出大哭,模板完全没用过,写个大数吧。

对大数的认知:

     首先大数在java中是一个独立的类,这个类可以说是对计算机数据类型(具有最大最小值)的扩充,在这个类里只要不超过内存限制,可以有无限位。

     大数有BigInteger和BigDecimal两类,前者能存整数,后者能存小数。BigDecimal的实现利用到了BigInteger,但是,由于BigDecimal的使用性更好(详情请往下看),因此我推荐大家用BigDecimal类型。这两个类在java.math.BigInteger和java.math.BigDecimal中;但是,由于我们可能会用到math中的许多类,我们也可以用一个简单的*代表导入所有类,既java.math.*;

具体的实现:

1.首先是对于大数的创建:

大数具有接受String类型参数的构造函数:public BigInteger(String val);

BigInteger m = new BigInteger("10");

另外,在大数中是不能像一般数那样用运算法的,因此不能把整数赋值给大数的话要调用valueOf(double long)(在BigDecimal中是double类型)的静态方法

m = BigInteger.valueOf(c);

对于大数的输入,和一般数一样创建Scanner对象,然后输入时会有一个nextInteger()方法,别忘了导入包

Scanner input= new Scanner(System.in);
m = input.nextBigInteger();

  *注意:BigDecimal构造方法的参数基本上都可以用,整数,小数,字符串,包括BigInteger。

2.对大数进行数学运算

  加法:add方法

BigInteger m = new BigInteger("200");
BigInteger n = new BigInteger("12");
m=m.add(n);

减法:subtract方法

m=m.subtract(n);

乘法:multiply方法

m=m.multiply(n);

除法:divide方法返回的类型和调用者的类型相同

m=m.divide(n);

比较大小:int m.compareTo(n);如果m>n返回1,m<n,返回-1,相等为0;

int c;
c=m.compareTo(n);
3.(扩展)大数的舍入模式补充(BigDecimal除法运算扩展)

    具体的divide如下.divide(BigDecimal val,int scale,RoundingMode ruundingMode)
      *注意BigInteger没有
    1.第二个参数值的是保留小数点后多少位
    2.第三个参数舍入模式:
 0 (int类型)没错就是零和BigDecimal.ROUND_UP想等。既如果后面以为大于0就进一位

 1  和BigDecimal.ROUND_DOWN相等。舍掉后面的数

 BigDecimal.ROUND_CEILING既如果是正数,按ROUND_UP处理负数,按ROUND_DOWN处理。

 BigDecimal.ROUND_HALF_UP既我们学的四舍五入法。

java中还有一些其他的舍入模式,不过不常用。因此,不在累述。

总结:

    OK,java常用的大数就是这些了,喜欢就关注一波《0^v^0》~


posted @ 2018-06-05 20:24  i-Curve  阅读(229)  评论(0编辑  收藏  举报