为什么我无法正确打印第47个斐波纳契数?

我使用64位操作系统,然后我也无法正确打印第46个斐波那契数字,这个数字少于40亿。

#include #include int main(void) { unsigned int n=50; int array[n]; array[0]=0; array[1]=1; printf("%i\n",array[0]); printf("%i\n",array[1]); for(int i=2;i<n;i++) { array[i]=array[i-1]+array[i-2]; printf("%i\n",array[i]); } 

您必须使用long long作为数组的数据类型。 因为你要存储整数范围的超范围数。( – 2,147,483,648到2,147,483,647)并且int i的声明应该在for循环之前。

 #include int main(void) { int n=50; long long array[n]; array[0]=0; array[1]=1; printf("%lli\n",array[0]); printf("%lli\n",array[1]); int i; for(i=2;i 

我无法正确打印第46个斐波纳契数,这个数字少于40亿。

您最有可能超出整数范围,从-4294967296到4294967295。

改变int array[n]; long long array[n];

此外,printf应该从%i更改为%lli

编辑:运行数字时,F(48)的预期值为4807526976,超出整数范围。

使用Rishikesh Raje的计数系统(即第1个Fibonacci是1),其中F(48)是4807526976,那么你无法得到F(47)2971215073,因为正如@kaylum所评论的那样,你使用有符号整数数组来保存你的值您需要更改为无符号,以及更改printf语句以打印未签名。 这将允许您达到32位算术的限制:

 #include  #define LIMIT (50) int main(void) { unsigned int array[LIMIT] = {0, 1}; printf("%u\n", array[0]); printf("%u\n", array[1]); for (size_t i = 2; i < LIMIT; i++) { array[i] = array[i - 1] + array[i - 2]; printf("%u\n", array[i]); } return 0; } 

为了超越32位,你可以像Rishikesh Raje建议的那样切换到long或long long,但如果你想用给定的位数达到最大结果,可以使用无符号变量。

使用无符号整数数组或更高值使用无符号long long long数组但是您不需要数组来打印斐波那契数组,您只需执行此操作: –

 void main() { unsigned long long i=1, num1=1, num2=0; printf("1 \n"); for(i; i<100 ; i++) { num1=num1+num2; num2=num1-num2; printf("%lli \n", num1); } getch(); }