我试图解决欧拉计划#2,我不断地得到“无限”或"NaN“(不是数字)的答案--我尝试将数字类型更改为int
(原名为Double
),但这并没有解决任何问题,只是给了我答案"-1833689714”。
public class Pro {
static int g = 1;
static int n, f = 0;
public static void main(String args[]) {
for (int i = 0; i <= 4000000; i++) {
f = f + g;
g = f - g;
if (f % 2 == 0) {
n += f;
}
}
System.out.println("Answer: " + n);
}
}
问题是:
Fibonacci序列中的每个新项都是通过添加前两个项来生成的。从1和2开始,头10个术语将是: 1、2、3、5、8、13、21、34、55、89、 通过考虑Fibonacci序列中值不超过400万的项,找出偶数项的和。
发布于 2012-01-19 21:10:08
您正在考虑Fibonacci序列的前4,000,000项,而不是不超过4,000,000的第一个x
项。
发布于 2012-01-19 21:32:41
您的问题是整数溢出:在Java中,int
变量仅限于Integer.MAX_VALUE
(2147483647)。如果在计算中超过此值,则会溢出到最小的负值Integer.MIN_VALUE
。请参见:
public class IntegerOverflow {
public static void main(String[] args) {
int i = Integer.MAX_VALUE;
System.out.println("i = Integer.MAX_VALUE: " + i);
System.out.println("i + 1: " + (i + 1));
System.out.println("i + 2: " + (i + 2));
}
}
为了避免溢出问题,使用java.math.BigInteger
类提供的任意精度整数执行计算:
import java.math.BigInteger;
public class BigIntegerExample {
public static void main(String[] args) {
BigInteger b = BigInteger.valueOf(Long.MAX_VALUE);
System.out.println("b = Long.MAX_VALUE: " + b);
System.out.println("b**2: " + b.multiply(b));
System.out.println("b**3: " + b.pow(3));
System.out.println("b**10: " + b.pow(10));
}
}
Note:由于您没有要求解决问题本身,所以我只是在回答这个问题。希望这能有所帮助
发布于 2012-01-19 21:09:55
您可能遇到了溢出。fibo(4000000)
远远高于MAX_INT
。
注:,您不是被要求在4,000,000第一个数字中找到和偶数,而是要找到它们的值不超过4,000,000的偶数之和。
您应该检查f< 4000000
和如果不是,中断,而不是等待i
达到4,000,000
https://stackoverflow.com/questions/8933276
复制相似问题