gpt4 book ai didi

java - 为什么改变数据类型会改变整个结果?

转载 作者:行者123 更新时间:2023-12-02 01:51:39 25 4
gpt4 key购买 nike

我编写了一个程序来计算 1100 之间的奇数乘法。那么为什么改变数据类型会给我一个完全不同的输出呢?为什么我使用int时输出是负数?此外,其他结果看起来很奇怪。代码:

long total = 1L;
for (int i = 1; i <= 100; i++) {
if (i % 2 != 0) {
total *= i;
}
}
System.out.println(total);

不同情况下的输出:

5196472710489536419(如果总计为)

-373459037(如果总计为int)

2.7253921397507295E78(如果总计为)

无穷大(如果总计为浮点)

最佳答案

使用不同的数据类型,结果将 overflow以不同的方式。使用 double 时的结果看起来是正确的,尽管您可能会失去很多精度。如果你想正确地乘以任意大小的整数,你可能应该使用 BigInteger :

BigInteger total = BigInteger.ONE;
for (int i = 1; i <= 100; i++) {
if (i % 2 != 0) {
total = total.multiply(BigInteger.valueOf(i));
}
}
System.out.println(total);

旁注:您可以开始,而不是迭代 1100 之间的所有 int 并检查它们是否奇数使用 1,然后将每次迭代增加 2 而不是 1:

BigInteger total = BigInteger.ONE;
for (int i = 1; i < 100; i+=2) {
total = total.multiply(BigInteger.valueOf(i));
}
System.out.println(total);

关于java - 为什么改变数据类型会改变整个结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70234488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com