【发布时间】:2016-08-28 15:25:31
【问题描述】:
我使用的是 64 位操作系统,那么我也无法正确打印小于 40 亿的第 46 个斐波那契数。
#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]);
}
【问题讨论】:
-
int array[n]; printf("%i\n",array[i]);-->unsigned int array[n]; printf("%u\n",array[i]); -
@kaylum unsigned int 在第 49 个元素处仍然超出范围。
-
@RishikeshRaje 是的,我说的是字面意思,因为问题是“为什么我不能打印 47th”。进行该更改将使 47th 可以正确打印。并且 OP 特别提到了“40 亿”,这似乎暗示 OP 知道 32 位数字的范围,因此可能期望在超过该数字时看到溢出,而不是之前。
-
@Kuldeep1007tanwar 不,不是。它是一个可变长度数组(VLA)。自 C99 以来它一直在 C 标准中(尽管在 C11 中成为可选)。
-
哦对不起我的错误我误解了这个概念:-void temp_arr (const int array_size) { int temp_arr[array_size]; }