您的位置:首页 > 其它

BigInteger类的一些用法

2016-03-10 20:22 309 查看
今天做蓝桥杯的一道立方尾求和题,循环求出i(1--10000) i的立方,我刚开始是想用int 去存i的立方的,但很显然会数值溢出,随后就考虑用long型去存,但i到3000-4000 的时候这样做就有问题了,同样也是数值溢出。后面再网上看到了BigInteger这个可以解决这个问题,查了一下API,上面是这样写的:

“不可变的任意精度的整数。所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型)。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger
还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。”

也就是说这是一个可以存储任意精度的整数的类,但是它的数值运算必须以方法调用方式取代运算符方式来实现的。由于这么做复杂了许多,运算速度会比较慢,所以在确定数值不会溢出的情况下,是不推荐用这种型式来进行数值存储和运算的,但这样对精度可以控制得比较好。

import java.math.BigInteger;

public class Lifangweibubian {

public static void main(String[] args) {

int sum = 0;

for (int i = 1; i < 10000; i++) {

BigInteger a = new BigInteger(String.valueOf(i));

a=a.multiply(a).multiply(a);

String b = String.valueOf(i);

String c = String.valueOf(a);

if(c.endsWith(b)){

System.out.println(a);

System.out.println(i);

sum++;

}

}

System.out.println(sum);

}

结果:

1

1

64

4

125

5

216

6

729

9

13824

24

15625

25

117649

49

132651

51

421875

75

438976

76

970299

99

1953125

125

15438249

249

15813251

251

52734375

375

53157376

376

124251499

499

125751501

501

242970624

624

244140625

625

420189749

749

423564751

751

669921875

875

997002999

999

1948441249

1249

52776573751

3751

83740234375

4375

124925014999

4999

125075015001

5001

177978515625

5625

244023456249

6249

670151588751

8751

823974609375

9375

824238309376

9376

999700029999

9999

36
这样可以完整的输出所有的可能性,而换做是int或者long结果会变少很多种。BigInteger类具体运算的方法可以去查API。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: