为什么这段代码的最后一次迭代无法正常工作?

问题描述 投票:0回答:1
我正在编写一个程序,打印前 50 个斐波那契数列,从 1 和 2 开始。 数字必须用逗号分隔,后跟空格(最后一个数字除外),应以新行结尾。

我尝试过的代码:

int main(void) { int fib[50]; fib[0] = 1; fib[1] = 2; int i; for ( i = 0; i < 50; i++) { if (i == 0) { printf("%d ,", fib[0]); } else if (i == 1) { printf("%d ,", fib[1]); } else if (i == 49) { fib[i] = fib[i-1] + fib[i-2]; printf("%d", fib[i]); } else { fib[i] = fib[i-1] + fib[i-2]; printf("%d ,", fib[i]); } } printf("\n"); return (0); }
我得到的结果:

1 ,2 ,3 ,5 ,8 ,13 ,21 ,34 ,55 ,89 ,144 ,233 ,377 ,610 ,987 ,1597 ,2584 ,4181 ,6765 ,10946 ,17711 ,28657 ,46368 ,75025 ,121393 ,196418 ,317811 ,514229 ,832040 ,1346269 ,2178309 ,3524578 ,5702887 ,9227465 ,14930352 ,24157817 ,39088169 ,63245986 ,102334155 ,165580141 ,267914296 ,433494437 ,701408733 ,1134903170 ,1836311903 ,2971215073 ,512559680 ,3483774753 ,3996334433 ,3185141890 ,
    
c loops iteration
1个回答
0
投票
我只能假设您正在经历

int

溢出。 
int
 值有一个有限的(特定于平台)范围。尝试一下
long long
。另外,您可以大大简化这里的逻辑。例如,您可以在循环之前打印前两个值;之后逻辑就正常了,不需要
if
。喜欢,

long long fib[50]; fib[0] = 1; fib[1] = 2; int i; printf("%lld, %lld", fib[0], fib[1]); for ( i = 2; i < 50; i++) { fib[i] = fib[i-1] + fib[i-2]; printf(", %lld", fib[i]); } printf("\n"); return (0);
    
© www.soinside.com 2019 - 2024. All rights reserved.