Я работаю над проектом домашней работы, где должен быть введен пользователем номер, а компьютер выплескивает числа Фибоначчи до этого. Обычно я мог бы это сделать, используя значения int, за исключением того, что для этой программы мне нужно использовать тип BigInteger, потому что типы int, long, double и т. Д. Слишком малы для хранения значений, которые мне понадобятся , Итак, это код, который у меня есть. Проблема в том, что он не печатает числа, которые он должен использовать. Мой импорт:Калькулятор Фибоначчи с BigIntegers
import java.math.*;
import java.util.Scanner;
и остальная часть кода:
public static void main(String args[]) {
//input to print Fibonacci series up to how many numbers
System.out.println("Enter number up to which Fibonacci series to print: ");
BigInteger i = BigInteger.valueOf(new Scanner(System.in).nextLong());
System.out.println("First " + i + " Fibonacci numbers: ");
//printing Fibonacci series upto number
for(int j=1; i.compareTo(BigInteger.valueOf(j))<0; j++){
System.out.print(fibonacci2(BigInteger.valueOf(j)) +" ");
}
}
public static BigInteger fibonacci2(BigInteger number){
if(number.compareTo(BigInteger.valueOf(1)) == 0 || number.compareTo(BigInteger.valueOf(2)) == 0){
return BigInteger.valueOf(1);
}
BigInteger fibo1=BigInteger.valueOf(1), fibo2=BigInteger.valueOf(1), fibonacci=BigInteger.valueOf(1);
for(int i=3; number.compareTo(BigInteger.valueOf(i))<=0; i++){
//Fibonacci number is sum of previous two Fibonacci number
fibonacci = fibonacci.add(fibo1.add(fibo2));
fibo1 = fibo2;
fibo2 = fibonacci;
}
return fibonacci; //The current Fibonacci number
}
}
Я знаю, что должен работать, потому что я был в состоянии использовать его с типом INT, но затем я начал нужны значения, которые были waaay больше, поэтому я был вынужден в BigInteger. Кто-нибудь может понять, что с ним не так? Я думаю, что проблема заключается в возврате метода fibonacci2.
Спасибо за помощь, просмотрев ее и вставив в нее, она отлично работала. Ты спасатель! –
Почему карта? Значения n являются последовательными, поэтому должен выполняться простой массив, и это должно быть быстрее (как ввод, так и извлечение), чем карта, особенно для больших значений. Поскольку нам нужны только n-1 и n-2, они должны быть уже в массиве, поэтому проверка также может быть отброшена. –