我对生成斐波那契数的程序有疑问。用户输入他/她需要的斐波那契数列的数量,程序生成它。问题是在 48 个数字之后,程序开始给出错误的数字。它似乎对数字进行了修剪,给出了一些随机结果。我创建了一个“unsigned long long int”数组,每个数字都是 64 位。它应该包含很大的数字,但事实并非如此。
这是我的代码:
#include <stdio.h>
int main (void)
{
int n , i ;
printf("Enter number of Fibonacci numbers you need : ");
scanf("%d" , &n);
unsigned long long int fib_numbers[n];
fib_numbers[0] = 0 ;
printf("1. %llu\n",0);
fib_numbers[1] = 1 ;
printf("2. %llu\n",1);
for(i=2;i<n;i++)
{
fib_numbers[i]=fib_numbers[i-1]+fib_numbers[i-2];
printf("%d. %llu\n",i+1,fib_numbers[i]);
}
return 0;
}
她的输出快照,通知号 49
最佳答案
这绝对是底层库不支持 64 位 unsigned long long 的问题。您的代码在我的 64 位 Linux 系统上完美运行。
48. 2971215073
49. 4807526976
50. 7778742049
51. 12586269025
52. 20365011074
53. 32951280099
54. 53316291173
55. 86267571272
56. 139583862445
57. 225851433717
58. 365435296162
59. 591286729879
60. 956722026041
至于解决方案,这取决于您的平台、编译器等。没有足够的信息来指导。但是,您可能想要研究支持更大数字的系统,因为 64 位最多只能覆盖 fib 94。 The GNU Multiple Precision Arithmetic Library可能会满足您长时间运行的需要,并且还可以自动纠正库中精度的不足。
关于c - Long Long int 修剪数字小于假定的 64 位容量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33401156/