黑马程序员技术交流社区

标题: 我这个累乘的结果为啥是零,跪求高手解答 [打印本页]

作者: hufu4635    时间: 2015-4-30 09:53
标题: 我这个累乘的结果为啥是零,跪求高手解答
class Test
{
        public static void main(String[] args)
        {
                long fac=1;
                for(int x=1;x<=1000;x++)
                {
                       
                        fac=fac*x;
                       
                }
                sop(fac);
                       
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}


作者: 鸡脑壳    时间: 2015-4-30 10:00
1000的阶乘结果 用 long 类型放不下,数据溢出了,显示为0
作者: 龙腾浩少    时间: 2015-4-30 10:14
溢出,数值太大了.
作者: hufu4635    时间: 2015-4-30 10:30
龙腾浩少 发表于 2015-4-30 10:14
溢出,数值太大了.

那怎么办呀,double也装不下。。。程序显示无穷大Infinity
作者: 考不上黑马    时间: 2015-4-30 10:39
呵呵,占位等大神
作者: 何志超    时间: 2015-4-30 10:46
当运行到20的时候fac是2432902008176640000,运行到x=21的时候fac=-4249290049419214848,当运行到x=66的时候就溢出了,你定义long fac = 1; 是错误的 ,必须在1后面加上L,这才是正确的赋值。
作者: 突然世界晴    时间: 2015-4-30 11:07
用BigInteger类中的方法
作者: hufu4635    时间: 2015-4-30 11:43
突然世界晴 发表于 2015-4-30 11:07
用BigInteger类中的方法

做出来了,非常感谢
作者: showdy    时间: 2015-4-30 11:50
  1. BigInteger s= BigInteger.valueOf(1);
  2.                 for(int i=1;i<1001;i++){
  3.                         s=s.multiply(BigInteger.valueOf(i));
  4.                 }
  5.                 System.out.println(s);
  6.                 String ss=s.toString();
  7.                 int num=0;
  8.                 for (int i = 0; i < ss.length(); i++) {
  9.                         char ch= ss.charAt(i);
  10.                         if(ch=='0'){
  11.                                 num++;       
  12.                         }       
  13.                 }
  14. System.out.println(num);
复制代码

作者: 1017161726    时间: 2015-4-30 12:52
上课老师没讲过BigInteger,这下学会了。thank

作者: zuiaisha    时间: 2015-4-30 12:59
楼上的很厉害啊
作者: 苟苟    时间: 2015-4-30 14:49
计算结果超出了long类型的最大值
作者: 只吃饭不洗碗    时间: 2015-4-30 15:18
受教了     
作者: 苟苟    时间: 2015-4-30 15:32
学习了。。。。
作者: zhiweiqi    时间: 2015-4-30 16:11
1000!是一个大数据,用BigInteger
作者: 龙腾浩少    时间: 2015-4-30 17:40
hufu4635 发表于 2015-4-30 10:30
那怎么办呀,double也装不下。。。程序显示无穷大Infinity

试试biginteger
作者: Zack    时间: 2015-4-30 20:15
数据溢出 用bigInteger类对象存储结果吧
作者: 雪风飞花    时间: 2015-4-30 20:23
放不下了,内存溢出了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2