Akash Tawade Ответов: 1

Выведите сумму всех четных чисел в ряду Фибоначчи ниже 4000000......но она не будет напечатана и показывает отрицательный знак вывода для бесконечного цикла


import java.util.Scanner;


public class Project_Euler_prob_2 
{


	public static void main(String[] args) 
	{
		
		Scanner sc = new Scanner(System.in);
		
		long  a = 1;
		long  b = 2;
		long temp = 0;
		
		long sum = 0;
		
		System.out.println("Enter the value of n");
		long n = sc.nextInt();
		
		for(int i=1;i<=n;i++)
		{
			 temp = a + b;
			 a = b;
			 b = temp;
			 
			 if(b%2 == 0)
			 {
				 sum = sum + b;
				 System.out.println(sum);
			 }
		}
	}

}


Что я уже пробовал:

Я пробовал изменить только int на long, но выход не показывался хорошо.... я не знаю другого решения..

1 Ответов

Рейтинг:
8

Daniel Pfeffer

Ваш код вычисляет сумму четных чисел Фибоначчи в первом случае Н Фибоначчи Это не то же самое, что вычисление суммы четных чисел Фибоначчи меньше, чем Н.

400 000 долларовth Число Фибоначчи приблизительно равно 1083,590 Это больше, чем любой встроенный тип в Java (или любом другом языке, о котором я знаю).

Проверьте состояние вашего цикла; это должно быть что-то вроде:

while (b < n) // don't sum Fibonacci numbers larger than n
{
   …
}


OriginalGriff

Хуже того - он хочет получить 4 000 000 - е число Фибоначчи! :OMG:

Daniel Pfeffer

Ой! Поэтому добавьте ноль к экспоненте.

Akash Tawade

Спасибо @DanielPfeffer

Richard Deeming

"Это больше, чем любой встроенный тип в Java (или любом другом языке, который я знаю)."

Теоретически, BigInteger (Ява[^] / .СЕТЬ[^]) мог справиться. :)

Daniel Pfeffer

Да, тот самый стандартная библиотека для обоих языков это возможно. Учитывая, что это, очевидно, домашнее задание (которое ОП сделал хорошую попытку решить), я не хотел путать ОП с посторонними деталями.