您的位置:首页 > 编程语言 > C语言/C++

C++计算斐波那契数列第n项(类型越界算法)

2013-11-18 09:17 946 查看
#include<stdio.h>
#include<string.h>
void sum(char a[],char b[])
{
int i,n,k;
for(i=strlen(b)-1,k=0;i>=0;k++,i--)
{
a[k]+=b[i]-'0';
n=k;
while(a
>'9')
{
a[n+1]+=(a
-'0')/10;
a
=(a
-'0')%10+'0';
n++;
}
}
}
int main()
{
char a[101],b[101],fib[500][201]={0},ch;
int i,j,k,c,n;
strcpy(fib[1],"1");
strcpy(fib[2],"2");
fib[0][0]='1';
for(i=1;i<101;i++)
fib[0][i]='0';
for(i=3;i<500;i++)
{
for(j=0;j<201;j++)
fib[i][j]='0';
}
for(i=3;;i++)
{
sum(fib[i],fib[i-1]);
sum(fib[i],fib[i-2]);
for(j=200;fib[i][j]=='0';j--);
fib[i][j+1]='\0';
for(k=0;k<=j;k++,j--)
{
ch=fib[i][k];
fib[i][k]=fib[i][j];
fib[i][j]=ch;
}
if(strlen(fib[i])>100||(strlen(fib[i])==101&&strcmp(fib[i],fib[0])>=0))
break;
}
n=i;
for(i=0;i<100;i++)
{
printf("fib[%d]=%s\n",i,fib[i]);
}
/*while(scanf("%s%s",a,b)!=EOF&&(strcmp(a,"0")!=0||strcmp(b,"0")!=0))
{
c=0;
for(i=1;i<=n;i++)
{
if(strcmp(fib[i],a)>=0&&strlen(fib[i])==strlen(a)||strlen(fib[i])>strlen(a))
if(strcmp(b,fib[i])>=0&&strlen(b)==strlen(fib[i])||strlen(b)>strlen(fib[i]))
c++;
}
printf("%d\n",c);
}*/
}


本文出自 “PHP程序猿” 博客,请务必保留此出处http://okowo.blog.51cto.com/4923464/1327750
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: