尽管使用标识符"long",但获取负值/错误值

Mou*_*rie 1 java numbers long-integer

我试图计算第一个,甚至四百万个斐波那契数的总和.但是,过了一段时间,即使我使用标识符long,只有在值变大时才打印出Y值.

这些是起始值:

long amount = 4000000;
long x = 1;
long y = 2;
long sum = 2;
Run Code Online (Sandbox Code Playgroud)

这是一个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);
Run Code Online (Sandbox Code Playgroud)

第一个Fibonacci数字输出正确:

Y: 2
X: 3
Y: 5
X: 8
Y: 13
X: 21
Y: 34
X: 55
Y: 89
X: 144
Y: 233
X: 377
Run Code Online (Sandbox Code Playgroud)

一段时间后输出:

X: 8838822096666553613
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303
Y: 9212367363430683303
Run Code Online (Sandbox Code Playgroud)

为什么只Y在一段时间后才计算出来?我的代码错了吗?

Aug*_*sto 6

你计算的数字非常大......对于Long来说太大了.由于您正在进行整数计算,请替换longfor a BigInteger.由于BigInteger是一个对象,您将无法使用+或%运算符,并且您将需要使用方法调用add()mod().