吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2301|回复: 9
收起左侧

[求助] 为什么1乘到100会等于0?

[复制链接]
宁程大大 发表于 2019-8-25 09:29
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是相等的,只是书写方式不一样

不懂没学过
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 02:17

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表