满意答案

90213wmh
2014.06.21

采纳率:57% 等级:5
已帮助:57人
大数求斐波那契数列问题
#include
#include
using namespace std;
int a[201][101]={0};
int b[201][101]={0};
int c[201][101]={0};
int n;
int main()
{
int i,j,k;
scanf("%d",&n);
for(k=1;k<=n;k++)
{
if(k<3)
{printf("%d\n",k);
}
else
{
c[k][1]=2;
b[k][1]=1;
for(i=1;i<=k-2;i++)
{for(j=1;j<=100;j++)
{a[k][j]=b[k][j];
b[k][j]=c[k][j];
c[k][j]=0;}
for(j=1;j<=100;j++)
{c[k][j]=c[k][j]+a[k][j]+b[k][j];
if(c[k][j]>=10)
{c[k][j]=c[k][j]-10;
c[k][j+1]=1;}
}
}
i=100;
while(c[k][i]==0) i--;
for(i=i;i>=1;i--)
printf("%d",c[k][i]);
printf("\n");
}
}
system("pause");
return 0;
}追问: 程序可以完美运行。能否在关键步骤或者难点处解释一下呢~比如如何处理溢出的方法、谢谢
追答:主要是这段程序,从最低位开始相加,逢10高位进1,低位减10,现在定义长度是100位,实际长度50即可满足200个数要求。
for(j=1;j<=100;j++)
{c[k][j]=c[k][j]+a[k][j]+b[k][j];
if(c[k][j]>=10)
{c[k][j]=c[k][j]-10;
c[k][j+1]=1;}
}
}
00分享举报
该程序用C++实现了一个计算斐波那契数列的算法,特别处理了数值溢出的情况。通过动态存储和进位处理,避免了大数运算导致的溢出。代码中,当斐波那契数超过10时,会将高位进1,低位减10,从而确保结果的正确性。程序适用于计算前200个斐波那契数,对于超过100位的数字进行了处理。
...&spm=1001.2101.3001.5002&articleId=117124955&d=1&t=3&u=c325e622bda94650b6176526b4042d49)
415

被折叠的 条评论
为什么被折叠?



