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类对象存储结果吧
回复 使用道具 举报
放不下了,内存溢出了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马