如何解决用Java计算产品,术语与“ for”循环,结果不同
考虑:
long y = 1;
for (int i = 49; i > 43; i--) {
y*= i;
}
long x = 49*48*47*46*45*44; // = 1478412928
long y // = 10068347520
尽管计算是偶数的,为什么结果会有所不同?
有解释吗?
解决方法
49*48*47*46*45*44
是int
文字的乘法,因此执行int
乘法,得到一个int
值。在这种情况下(由于结果大于Integer.MAX_VALUE
)会溢出,然后再将结果分配给long
变量。因此结果不正确。
将其更改为49L*48*47*46*45*44
或(long)49*48*47*46*45*44
以执行long
乘法。
另一方面,在您的第一个计算中,您从一个long
变量开始,其值为1
,循环将long
与int
乘以每次迭代都执行long
乘法,因此不会发生溢出。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。