为什么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);
}
} 对这个语言不熟悉,不过我看你这是个循环语句啊。。。不应该把System.out.println("1乘到100等于"+num);写进循环内么? 乘法计算溢出了。
单步执行程序,
当循环变量i=16时,
累加器变量num为2004310016,
两项相乘就会超出int范围,
所以当i=16时就不能这样算了。
更何况你这个i=100.
(至于为什么会变0,当num=-2147483648(此处已溢出,所以为负数),i=34时,相乘计算溢出刚好为零,此后零乘任何数都为零),
你可能要使用高精度计算算法,
因为经过测试long类型也会溢出。 在Java中int的取值范围为(-2147483648~2147483647),当你的结果超出这个界限,叫做溢出,你将int改为double就可以显示正确的结果了。希望采纳答案 zx411502 发表于 2019-8-25 12:08
对这个语言不熟悉,不过我看你这是个循环语句啊。。。不应该把System.out.println("1乘到100等于"+num); ...
system.out.printed 是Java标准输出语句,数据类型范围的问题写进去有什么用? 虽然不懂 看用int就知道错了吧
100的阶乘数字多大啊 虽然看不懂,但是是不是这样写啊
int num=1;
for(int i=2;i<=100;i++){
num=num*i;
} 这种问题应该在num*=i 后面加个短点去调试看看。 wx18977133094 发表于 2019-8-26 00:11
虽然看不懂,但是是不是这样写啊
int num=1;
for(int i=2;i
num*=i和num=num*i是相等的,只是书写方式不一样 Keyboard 发表于 2019-8-26 17:37
num*=i和num=num*i是相等的,只是书写方式不一样
不懂没学过
页:
[1]