应该是因为计算出的值超过了int的取值范围溢出了,将各变量的数据类型改为long long int即可。
修改如下:
参考链接:
#include <stdio.h>
int main(void){
// https://zhuanlan.zhihu.com/p/435724243
// 因为兔子的数量会超出int的取值范围,这里将各变量的数据类型改为long long int
long long m,n,k,h=0;
for(m=0,n=1,k=1;k<=50;k++){
h=m+n;
m=n;
n=h;
printf("%20lld",m);
if((k%5==0)){
printf("\n");
}
}
return 0;
}
【以下回答由 GPT 生成】
问题的解决方案如下:
斐波那契数列中出现负数是因为使用32位有符号整数的范围有限。斐波那契数列的数值在一定的序号后会超出32位整数的最大值,从而导致溢出,使得数值变为负数。
为了解决这个问题,可以使用更大范围的数据类型,例如64位整数 (long long) 或者使用高精度的大数库。以下是使用64位整数类型的修改后的代码:
#include <stdio.h>
int main() {
long long m = 0, n = 1, k, h = 0;
for (k = 1; k <= 50; k++) {
h = m + n;
m = n;
n = h;
printf("%20lld", m);
if (k % 5 == 0) {
printf("\n");
}
}
return 0;
}
使用 long long
类型可以延长斐波那契数列的计算范围,避免了溢出问题。这段代码将打印出正确的斐波那契数列数值。
希望这能解答您的问题!如果您有其他疑问,请随时提问。
【相关推荐】