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呢?