宁程大大 发表于 2019-8-25 09:29

为什么1乘到100会等于0?

public class HelloWorld{
        public static void main(String[] args){
               
                int num=1;
                for(int i=2;i<=100;i++){
                        num*=i;
                }
                System.out.println("1乘到100等于"+num);
        }
}

zx411502 发表于 2019-8-25 12:08

对这个语言不熟悉,不过我看你这是个循环语句啊。。。不应该把System.out.println("1乘到100等于"+num);写进循环内么?

Lifetimer 发表于 2019-8-25 12:18

乘法计算溢出了。
单步执行程序,
当循环变量i=16时,
累加器变量num为2004310016,
两项相乘就会超出int范围,
所以当i=16时就不能这样算了。
更何况你这个i=100.
(至于为什么会变0,当num=-2147483648(此处已溢出,所以为负数),i=34时,相乘计算溢出刚好为零,此后零乘任何数都为零),
你可能要使用高精度计算算法,
因为经过测试long类型也会溢出。

萧筱小 发表于 2019-8-25 16:33

在Java中int的取值范围为(-2147483648~2147483647),当你的结果超出这个界限,叫做溢出,你将int改为double就可以显示正确的结果了。希望采纳答案

萧筱小 发表于 2019-8-25 16:34

zx411502 发表于 2019-8-25 12:08
对这个语言不熟悉,不过我看你这是个循环语句啊。。。不应该把System.out.println("1乘到100等于"+num); ...

system.out.printed 是Java标准输出语句,数据类型范围的问题写进去有什么用?

sunfly 发表于 2019-8-25 23:19

虽然不懂 看用int就知道错了吧
100的阶乘数字多大啊

肖伟95 发表于 2019-8-26 00:11

虽然看不懂,但是是不是这样写啊
int num=1;
                for(int i=2;i<=100;i++){
                        num=num*i;
                }

魔术使nqy 发表于 2019-8-26 16:41

这种问题应该在num*=i 后面加个短点去调试看看。

Keyboard 发表于 2019-8-26 17:37

wx18977133094 发表于 2019-8-26 00:11
虽然看不懂,但是是不是这样写啊
int num=1;
                for(int i=2;i

num*=i和num=num*i是相等的,只是书写方式不一样

肖伟95 发表于 2019-8-26 19:33

Keyboard 发表于 2019-8-26 17:37
num*=i和num=num*i是相等的,只是书写方式不一样

不懂没学过
页: [1]
查看完整版本: 为什么1乘到100会等于0?