我的数组显示 50 个元素,然后我得到随机内存大小,这是为什么?
My array displays 50 elements then i get random memory sizes, why is that?
如果我尝试输入系列中的第 50 个数字,它会显示到第 46 个,然后生成随机数,但是当我计算两个中的字符时,我发现它们都等于 10,那么为什么它恰好停在46?
我的代码:
void calculating_f(int val){
int aray[100] = {0,1};
int i;
printf("%i %i ", aray[0], aray[1]);
for (i=2; i < val; i++){
aray[i] = aray[i - 2] + aray[i - 1];
printf("%i ", aray[i]);
}
}
整数溢出(假设 int
在您的系统上是 32 位)。第 46 个斐波那契数是最大的,适合带符号的 32 位值。
顺便说一句——你真的不需要数组。
[修正后回答]
感谢@mch 指出我在使用 'unsigned int data type' 的回答中的错误。
请使用 'unsigned long long int (64bit data type)' 和 '%llu' 格式说明符进行 printf() 调用。
[修正前回答]
aray 按照定义存储 int 数据。
当您给定 limit val = 50 时,当 i = 47 时,计算出的值超过了有符号整数数据类型的最大值。
您应该将数据类型更改为 'unsigned int' 并在 printf() 调用的格式说明符中使用“%u”。
因为你使用的是 int,c 中的 int 可以保存从 –2,147,483,648 到 2,147,483,647 的数字,但是第 47 个斐波那契数是 2971215073,它超出了这个范围导致 overflow.you 可以尝试使用 long long这将使您达到第 92 个斐波那契数。
p.s 如果您只想获得第 n 个斐波那契数,则不需要数组。如果您需要计算第 n 个斐波那契数,请查看矩阵求幂,如果您只需要第 n 个斐波那契数
,它比您正在做的要快得多
如果我尝试输入系列中的第 50 个数字,它会显示到第 46 个,然后生成随机数,但是当我计算两个中的字符时,我发现它们都等于 10,那么为什么它恰好停在46?
我的代码:
void calculating_f(int val){
int aray[100] = {0,1};
int i;
printf("%i %i ", aray[0], aray[1]);
for (i=2; i < val; i++){
aray[i] = aray[i - 2] + aray[i - 1];
printf("%i ", aray[i]);
}
}
整数溢出(假设 int
在您的系统上是 32 位)。第 46 个斐波那契数是最大的,适合带符号的 32 位值。
顺便说一句——你真的不需要数组。
[修正后回答]
感谢@mch 指出我在使用 'unsigned int data type' 的回答中的错误。
请使用 'unsigned long long int (64bit data type)' 和 '%llu' 格式说明符进行 printf() 调用。
[修正前回答]
aray 按照定义存储 int 数据。
当您给定 limit val = 50 时,当 i = 47 时,计算出的值超过了有符号整数数据类型的最大值。
您应该将数据类型更改为 'unsigned int' 并在 printf() 调用的格式说明符中使用“%u”。
因为你使用的是 int,c 中的 int 可以保存从 –2,147,483,648 到 2,147,483,647 的数字,但是第 47 个斐波那契数是 2971215073,它超出了这个范围导致 overflow.you 可以尝试使用 long long这将使您达到第 92 个斐波那契数。
p.s 如果您只想获得第 n 个斐波那契数,则不需要数组。如果您需要计算第 n 个斐波那契数,请查看矩阵求幂,如果您只需要第 n 个斐波那契数
,它比您正在做的要快得多