Java 如何对修改后的斐波那契函数使用BigInt

Java 如何对修改后的斐波那契函数使用BigInt,java,dynamic-programming,biginteger,Java,Dynamic Programming,Biginteger,我正试图解决这个问题: 通过动态规划,我能够解决这个问题,以下是迄今为止的代码: import java.util.Scanner; public class Dy { static long[] storage = new long[20]; public static void main(String[] args) { Scanner sx = new Scanner(System.in);

我正试图解决这个问题:

通过动态规划,我能够解决这个问题,以下是迄今为止的代码:

    import java.util.Scanner;
    public class Dy
    {
        static long[] storage = new long[20];
        public static void main(String[] args)
        {
            Scanner sx = new Scanner(System.in);

            storage[0] = sx.nextInt();
            storage[1] = sx.nextInt();
            int x = sx.nextInt();

            System.out.println(beast(x-1));


        }

    public static long beast(int n)
    {
        if(n==0)
            return storage[n];
        if(n==1)
            return storage[n];

        if(storage[n]!=0)
            return storage[n];

        storage[n] = (beast(n-1)*beast(n-1)) + beast(n-2);

        return storage[n];
    }
}
但是真正的问题是,如果n大约是20,那么即使
long
数据类型也不能保存该值,因此选择显然是
biginger
,但是作为一名学习者,我想知道如何在Java中对数组使用
biginger
?任何帮助都将不胜感激,谢谢

你可以使用
地图
之类的东西

static Map<Integer, BigInteger> storage = new HashMap<>();

public static void main(String[] args) {
    Scanner sx = new Scanner(System.in);

    // Add 0 and 1.
    storage.put(0, BigInteger.valueOf(sx.nextInt()));
    storage.put(1, BigInteger.valueOf(sx.nextInt()));
    int x = sx.nextInt();

    System.out.println(beast(x - 1));
}

public static BigInteger beast(int n) {
    if (!storage.containsKey(n)) {
        BigInteger t = beast(n - 1);
        storage.put(n, t.multiply(t).add(beast(n - 2)));
    }
    return storage.get(n);
}
静态映射存储=newhashmap();
公共静态void main(字符串[]args){
扫描仪sx=新扫描仪(System.in);
//添加0和1。
storage.put(0,biginger.valueOf(sx.nextInt());
storage.put(1,biginger.valueOf(sx.nextInt());
int x=sx.nextInt();
System.out.println(beast(x-1));
}
公共静态BigInteger beast(int n){
如果(!storage.containsKey(n)){
大整数t=beast(n-1);
存储.put(n,t.乘法(t).加法(beast(n-2));
}
返回存储。获取(n);
}

Wow!这更像是一个很好的简化动态编程,谢谢,顺便说一句,我想知道从哪里开始阅读Java中的大整数?其他的问题和教程似乎有点不完整,任何关于这方面的建议都会很有帮助,谢谢:)Javadoc。我对Java不是很了解,但是一个简单的数组不是比一个映射更容易(可能更快)吗?Java数组的长度是固定的,那么ArrayList呢?