eclipes打印不出1到1000的阶乘

eclipes打印不出1到1000的阶乘,用EditPlus就可以打印出结果 什么鬼问题

这个跟定义的数据类型有关系,int类型只有四个字节,肯定不行
换成double试试

这个题 非常的有意思 如果要是面试题的话 非常佳 不是eclipse显示不了而是 1到1000的值非常的大,无穷大吧 如果你用long 装那个数的话在在65次之前就发生了多次
溢出了,在65次是溢出是0,所以以后的结果都是0,所以就出现了你的不能显示的结果

如果要是用double来装那个数字 结果显示是Infinity ,代码都是自己测的。

上面的结果都不满意,在大他还是有确定值得对吧 。我们用biginteger

BigInteger g=new BigInteger("1");
int t=0;
for (int i = 1; i < 1000; i++) {

        BigInteger b=g.multiply(new BigInteger(String.valueOf(i)));


        g=g.add(b);

    }

    System.out.println(g.toString());



    //结果非常的长,但是有结果 是1-999的吧。 自己打印下

1000 的阶乘是 4.02387260077093773543702433923e+2567 我只能说现在的 win 10 的计算器功能太强大了

首先,这肯定是一个溢出的问题,int的最大值为2147483648,可以看下面的代码:
public static void main(String[] args) {
int s = 1;
int i = 1;
for (i = 1; i < 1001; i++) {
try {
s = i*s;
if(s<=2147483647&&s>100000000){
System.out.println(s+","+i);
}
else if(s==0){
System.out.println(i);
}

        } catch (Exception e) {
            System.out.println(i);
        }
    }
    System.out.println(s+","+i);
}

输出结果:

479001600,12
1932053504,13
1278945280,14
2004310016,15
2004189184,16
109641728,19
862453760,23
2076180480,25
1484783616,27
1409286144,30
738197504,31
34
35
36
37
38
.
.
.
997
998
999
1000
0,1001
可以看出,在阶乘到12时就已经到达了int的准确计算的极限,到13就溢出了,然后循环显示int的最大值之间的数值。
然后可以执行以下代码:
public static void main(String[] args) {
Long s = 1L;
Long i = 1L;
for (i = 1L; i <=32L; i++) {
s *= i;
System.out.println(s+","+i);

    }
    System.out.println("31阶乘循环的次数"+Math.abs(s)/32L/2147483648L);
    System.out.println("32阶乘循环的次数"+Math.abs(s)/2147483648L);
}

结果:
1,1
2,2
6,3
24,4
120,5
720,6
5040,7
40320,8
362880,9
3628800,10
39916800,11
479001600,12
6227020800,13
87178291200,14
1307674368000,15
20922789888000,16
355687428096000,17
6402373705728000,18
121645100408832000,19
2432902008176640000,20
-4249290049419214848,21
-1250660718674968576,22
8128291617894825984,23
-7835185981329244160,24
7034535277573963776,25
-1569523520172457984,26
-5483646897237262336,27
-5968160532966932480,28
-7055958792655077376,29
-8764578968847253504,30
4999213071378415616,31
-6045878379276664832,32
31阶乘循环的次数87979109
32阶乘循环的次数2815331509

可以从数据看出,当循环次数大于int的最大值是,此时就无法显示,如果EditPlus可以打印出,那应该就是和eclipse有关

好像没有算负数,从上面的数据看出来对于long的范围,到l21的阶乘就已经溢出了,应该是在阶乘34显示不出的,33可以显示负数。
class oper(int):
def init(self,s):
for i in range(1,36):
s = s*i
if i>31:
print(s,i)
print(i,"阶乘long循环最大值的次数为",abs(i)/9223372036854775808)
结果:
263130836933693530167218012160000000 32
32 阶乘的次数为 3.469446951953614e-18
8683317618811886495518194401280000000 33
33 阶乘的次数为 3.577867169202165e-18
295232799039604140847618609643520000000 34
34 阶乘的次数为 3.686287386450715e-18
10333147966386144929666651337523200000000 35
35 阶乘的次数为 3.7947076036992655e-18
感觉规也没啥规律了。。