我使用64位操作系统,然后我也无法正确打印第46个斐波那契数字,这个数字少于40亿。
#include<cs50.h>
#include<stdio.h>
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]);
}
答案 0 :(得分:2)
我无法正确打印第46个斐波纳契数,这个数字少于40亿。
你很可能超出整数范围,从-4294967296到4294967295.
将int array[n];
更改为long long array[n];
此外,printf应该从%i
更改为%lli
编辑:运行数字时,F(48)的预期值为4807526976,超出整数范围。
答案 1 :(得分:2)
您必须使用long long作为数组的数据类型。因为你要存储整数范围的超范围数。( - 2,147,483,648到2,147,483,647) 并且int i的声明应该在for循环之前。
#include<stdio.h>
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<n;i++)
{
array[i]=array[i-1]+array[i-2];
printf("%lli\n",array[i]);
}
}
答案 2 :(得分:1)
使用Rishikesh Raje的计数系统(即第1个Fibonacci是1),其中F(48)是4807526976,那么你无法得到F(47)2971215073因为,正如@kaylum评论的那样,你使用了有符号整数数组来保存您需要更改为无符号的值,以及更改printf语句以打印未签名的值。这将允许您达到32位算术的限制:
#include <stdio.h>
#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,但如果你想用给定的位数达到最大结果,可以使用无符号变量。
答案 3 :(得分:0)
使用无符号整数数组或更高值使用无符号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();
}