Cout не выводит правильные данные

Я написал программу на c ++ для вывода числа в последовательности Фибоначчи, которой вы ее сообщаете. Он работает примерно до 47-го числа, после чего печатает совершенно разные числа, даже отрицательные, и ни одно из них не содержит более 9 или 10 отдельных целых чисел. Вот код

#include <iostream>

int a = 0;
int b = 1;
int c;
int var = 0;
int num;

void fibonacci()
{
using namespace std;
c = a;
a = a + b;
b = c;
var += 1;
}

void loop()
{
using namespace std;
for (int iii=0; iii<num; iii++)
fibonacci();
}

int main()
{
using namespace std;
cout << "What fibonacci number do you want to know? ";
cin >> num;
cin.get();
loop();
cout << "" << endl;
cout << c << endl;
cin.get();

a = 0;
b = 1;
var = 0;

return main();
}

Есть ли какое-то ограничение на количество символов, которые c ++ может печатать одновременно?

0

Решение

Увеличьте размер / емкость вашего типа данных с int для unsigned long или же unsigned long long, Каждый из них имеет размер, который при превышении создает битовый шаблон, который почти наверняка создаст неправильное значение. Кроме того, так как ваше число никогда не может быть отрицательным, разрешение использовать часть размера числа для отрицательных значений (что является битом) приводит к потере максимального числа, которое вы можете представить.

Кроме того, вы должны добавить проверку, чтобы обнаружить этот случай. Если значение в этом алгоритме уменьшается, вы явно превысили пределы вашего типа данных. На этом этапе выведите вежливую ошибку, которую невозможно вычислить, поскольку она слишком велика.

1

Другие решения

Fib(47) = 2971215073 который больше чем 2147483647,

std::numeric_limits<int>::max() == 2^31 - 1 == 2147483647 в твоем случае.

Ваше целое число результата поэтому переполняется в num == 47,

@jogojapan добавил:

sizeof (int) составляет 4 байта (то есть на многих платформах), что составляет 32 бита.
2 ^ 31-1 [numeric_limits :: max ()] — это наибольшее число, которое может быть представлено с помощью int (on
эти платформы).

6

Вот мой код для вывода серии Fabonica в C:

    #include<stdio.h>
int main(){
int k,r;
long int i=0l,j=1,f;

//Taking maximum numbers form user
printf("Enter the number range:");
scanf("%d",&r);

printf("FIBONACCI SERIES: ");
printf("%ld %ld",i,j); //printing firts two values.

for(k=2;k<r;k++){
f=i+j;
i=j;
j=f;
printf(" %ld",j);
}

return 0;
}

Образец вывода:

Введите диапазон номеров: 15

СЕРИЯ FIBONACCI: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

Ряд Фибоначчи, использующий массив в c

 #include<stdio.h>
int main(){
int i,range;
long int arr[40];

printf("Enter the number range: ");
scanf("%d",&range);

arr[0]=0;
arr[1]=1;

for(i=2;i<range;i++){
arr[i] = arr[i-1] + arr[i-2];
}

printf("Fibonacci series is: ");
for(i=0;i<range;i++)
printf("%ld ",arr[i]);return 0;
}
1

Ваше целое число переполнено. У Google «целочисленное переполнение» и подписанный int. Попробуйте изменить его на unsigned int, и вы заметите, что он будет переполнен при большем числе.

0

Это не из-за ограничения количества цифр, которое может обработать cout. Это потому, что ваши цифры слишком велики, чтобы соответствовать int, Попробуйте использовать long или же long long за a, b а также c, Вот хороший справочник по различным типам данных.

-1