A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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);
        }
}

17 个回复

倒序浏览
1000的阶乘结果 用 long 类型放不下,数据溢出了,显示为0
回复 举报
溢出,数值太大了.
回复 举报

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

做出来了,非常感谢
回复 举报
showdy 中级黑马 2015-4-30 11:50:13
9#
  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);
复制代码
回复 举报
上课老师没讲过BigInteger,这下学会了。thank
回复 举报
楼上的很厉害啊
回复 举报
计算结果超出了long类型的最大值
回复 举报
受教了     
回复 举报
学习了。。。。
回复 举报
1000!是一个大数据,用BigInteger
回复 举报
hufu4635 发表于 2015-4-30 10:30
那怎么办呀,double也装不下。。。程序显示无穷大Infinity

试试biginteger
回复 举报
Zack 中级黑马 2015-4-30 20:15:00
17#
数据溢出 用bigInteger类对象存储结果吧
回复 举报
放不下了,内存溢出了
回复 举报
您需要登录后才可以回帖 登录 | 加入黑马