0

我写了一个计算斐波那契数的程序。最初,由于资源问题,我无法输入大量数字,但现在在我重新编写后,它运行速度很快。但是,如果我使用ints,一旦我输入大数字,数字就会变成负数。我尝试使用long,但它们也很快环绕。如果你不明白我的意思,那么这段代码应该解释一下:

`System.out.println("The 536th fibonacci number: "fib(536));`
`*The 536th fibonacci number: -8757250051716203595*`

显然,在这种情况下,负数是没有意义的,所以我想知道如何才能使它始终有效——无论如何都不要回绕。

编辑:问题解决了!

import java.math.BigInteger;
public static BigInteger fib(int n)
{
    return fib2h(n,BigInteger.ONE,BigInteger.ONE);
}


public static BigInteger fibh(int n,BigInteger o,BigInteger p)
{
    if(n==1) return o;
    return fib2h(n-1,p,o.add(p));
}
4

5 回答 5

6

您可以从 java.math尝试BigInteger 。

于 2012-09-17T22:07:06.743 回答
2

BigInteger将帮助您实现您想要的。

于 2012-09-17T22:06:06.017 回答
2

您可以尝试以下(迭代):

public static BigInteger fib(int n) {
    BigInteger a = BigInteger.ONE;
    BigInteger b = BigInteger.ONE;
    BigInteger c;
    for (int i = 3; i <= n; i++) {
         c = a.add(b);
         a = b;
         b = c;
    }
    return b;
}

在http://blog.paulvargas.org/numeros-fibonacci/中查看更多信息

于 2012-09-17T22:22:20.230 回答
0

你可以使用java.lang.BigInteger

于 2012-09-17T22:09:49.283 回答
0

我解决了我的问题!我做了什么:

import java.math.BigInteger;
public static BigInteger fib(int n)
{
    return fib2h(n,BigInteger.ONE,BigInteger.ONE);
}


public static BigInteger fibh(int n,BigInteger o,BigInteger p)
{
    if(n==1) return o;
    return fib2h(n-1,p,o.add(p));
}
于 2012-09-19T00:34:01.547 回答