黑马程序员技术交流社区
标题:
求解1000!
[打印本页]
作者:
蒋文辉
时间:
2015-1-20 23:09
标题:
求解1000!
int p=1;
for(int i=2;i<1001;i++){p=p*i;}为什么算出结果是0?
作者:
小棽
时间:
2015-1-20 23:09
本帖最后由 小棽 于 2015-1-22 20:26 编辑
因为乘积出来的结果太大,在基本数据类型中没有可以存放这么大数值的数据类型,只能使用对象来做,在java的API中提供了bigInteger类,来做大数据的运算,具体实现代码如下:
package com.itheima;
import java.math.BigInteger;
/**
* 求1000!
*
*/
public class Test9 {
public static void main(String[] args) {
BigInteger bi = new BigInteger("1"); //定义一个大整形对象,并给初始值
for(int x = 2; x < 1001; x++){
bi = bi.multiply(BigInteger.valueOf(x)); //将x转成大数据对象,并与bi进行乘法运算
}
System.out.println(bi); //打印结果
}
}
复制代码
作者:
boy259695
时间:
2015-1-21 00:01
数值太大的原因,1乘到1000早就超过int的最大值了,~就是把int改成long,都打不出这个值,实在太大,乘到50的时候已经是个天文数字了
作者:
cuixinfu
时间:
2015-1-21 00:13
int型的数据存放不下了 你那阶乘结果太大了
作者:
范建海
时间:
2015-1-21 22:45
最后的结果已经远远超出了int类型的范围了,超出的1部分被截断了,所以显示0
作者:
流星划过的黎明
时间:
2015-1-22 00:24
这个阶乘是很可怕的,就像那个故事中讲的向国王求赏在棋盘中以2的幂函数放稻谷一样,数值太大了,早就超出了int的范围了
作者:
初_学者
时间:
2015-1-22 19:31
呵呵。应该提示超出精度了吧。
你的取值的区域超过了范围。
建议转换类型吧。 换成long吧!!!
作者:
yanqiuqiu
时间:
2015-1-26 08:53
应该是数据过大超出int类型数值范围。
作者:
安鑫东
时间:
2015-1-27 22:35
public static void main(String[] args) {
long s = 65536*65536L;//2^33 在二进制中刚好超过int数据范围
int n = 1;
long sum = 1L;
while(true){
sum *= n;
n++;
if(sum >= s){//当n的阶乘大于超出int的32位的时候 跳出
break;
}
}
System.out.println("n ="+ n);
n = 14;
作者:
sixleaves
时间:
2015-2-4 19:41
乘法溢出了。
作者:
蜡笔3285
时间:
2015-2-9 08:33
恩,就是这样!
作者:
godrick007
时间:
2015-4-19 17:43
这个数太大了,就是long也得不出结果的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2