java吧 关注:1,238,495贴子:12,708,716
  • 10回复贴,共1

自学小白求问代码

只看楼主收藏回复

long sum=1
for (int i =1; i <=20;i++)
sum=sum*i;
结果算出结果算出sum=-2102132736
求问是怎么算出来的呢? 还有java 里20!代表什么意思呢?


来自Android客户端1楼2016-07-13 15:56回复
    我把运行过程模拟下
    long sum=1
    for (int i =1; i <=20;i++)
    sum=sum*i;
    第一次循环
    sum=1;
    i=1
    sum = 1* 1 ;
    第二次循环:
    sum=1;
    i = 2;
    sum=1*2;这时候sum=2了
    第三次循环 :
    sum=2;
    i=3;
    sum=2*3=6,
    依次类推 当i=20的时候循环结束


    2楼2016-07-13 16:01
    收起回复
      超出运算的上限,长整形的上限是21亿,你这个代码超过了它的上限,根据补码算法出现了负数,相当于你用计算器算乘法超出一亿会报错一样


      3楼2016-07-13 16:12
      收起回复
        你怎么算的,我算的不是这个数啊,我算的是
        2432902008176640000,就是20的阶乘啊。


        IP属地:湖北4楼2016-07-13 16:13
        收起回复