java - 使用标识符 "long"时得到负值/错误值

标签 java numbers long-integer

<分区>

我正在尝试计算第一个甚至四百万个斐波那契数的总和。然而,过了一会儿,随着值变大,只有 Y 值被打印出来,即使我使用的是 long 标识符。

这些是起始值:

long amount = 4000000;
long x = 1;
long y = 2;
long sum = 2;

这是一个 for 循环,在程序运行时汇总并打印出数字。

for (int i = 0; i < amount - 1; i++) {
    if (x > y) {
        y = x + y;
        if (y % 2 == 0) {
            sum += y;
        }           
        System.out.println("X: " + x);
    } else {
        x = x + y;
        if (x % 2 == 0) {
            sum += x;
        }   
        System.out.println("Y: " + y);
    }
}
System.out.println("Summa: " + sum);

正确输出第一个斐波那契数列:

Y: 2
X: 3
Y: 5
X: 8
Y: 13
X: 21
Y: 34
X: 55
Y: 89
X: 144
Y: 233
X: 377

一段时间后的输出:

X: 8838822096666553613
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303

为什么一段时间后只有 Y 得到计算?我的代码有错吗?

最佳答案

您正在计算的数字相当大……对于 Long 来说太大了。由于您正在进行整数计算,因此请将 long 替换为 BigInteger。由于 BigInteger 是一个对象,您将无法使用 + 或 % 运算符,您需要使用方法调用 add()mod().

关于java - 使用标识符 "long"时得到负值/错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35549145/

相关文章:

java - jOOQ 3.5.3 中的案例表达式和别名

java - 从批处理运行可执行 jar - 如何指定 java 主目录?

validation - Google 表格中数字的数据验证不起作用

javascript - 为什么 6.00 + (plus) 5.00 = "5.006.00"?

java - 尝试将单词放入数组时的 NPE

java - java中用图像填充黑色?

c++ - C++中如何获取特定区间内的随机数

java - 使用java从时间戳(长整数)转换为日期格式

java - 从 Java 中的文本文件中读取 long 类型

python - 在python中使用math模块的sqrt函数处理长数