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。
“不可变的任意精度的整数。所有操作中,都以二进制补码形式表示 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。
相关文章推荐
- android开发之java内存泄露分析
- 从angularJS改道Vue.js,趟过第一个坑!
- JS里的onclick事件
- Pg188-3 构造方法
- BZOJ 1264: [AHOI2006]基因匹配Match 树状数组+DP
- 携程Android App插件化和动态加载实践
- Nginx为什么比Apache Httpd高效:原理篇
- content-type 类型讲解
- Apache commons-io
- 跳青蛙问题与变态跳青蛙问题
- 1042/72 n!
- 数据预处理
- JS中数组去除重复的方法
- DOM事件三个阶段
- C++中static的用法总结
- Linux的用户、组和权限管理
- [JZOJ4378] 八卦天盘
- android源码设计模式解析与实战 读书笔记 2 单例模式(上)
- 项目的平台切换
- 软件工程第二次作业 软件评价