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

You can try something like following (iterative):

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;
}

See more in http://blog.paulvargas.org/numeros-fibonacci/

于 2012-09-17T22:22:20.230 に答える
2

BigIntegerは、あなたが望むものを達成するのに役立ちます。

于 2012-09-17T22:06:06.017 に答える
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 に答える
0

java.lang.BigIntegerクラスを使用できます

于 2012-09-17T22:09:49.283 に答える