求斐波那契数,不打表的话会超时,打表的话普通的高精度开不出来那么大的数组,不如一个int存8位,特殊处理一下,具体看代码
#include<stdio.h>
#include<string.h>
#define MAX_SIZE 5005
#define LEN 150
#define to 100000000/*一个int存8位*/
int num[MAX_SIZE][LEN];
void get_num()
{
int i,j,k;
num[0][0]=0;/*第一个斐波那契数*/
num[1][0]=1;/*第二个斐波那契数*/
for(i=2;i<MAX_SIZE;i++)
{
for(j=0;j<LEN;j++)
{
num[i][j]=num[i-1][j]+num[i-2][j];
}
for(j=0;j<LEN-1;j++)
{/*开始进位*/
num[i][j+1]+=num[i][j]/to;
num[i][j]%=to;
}
}
}
void put_num(int n)
{
int i,ok;
printf("The Fibonacci number for %d is ",n);
for(i=LEN-1,ok=0;i>=0;i--)
{
if(ok)
{
char number[10];
int L;
sprintf(number,"%d",num[n][i]);
L=strlen(number);
for(int k=0;k<8-L;k++) printf("0");
printf("%s",number);
}
else if(num[n][i]!=0)/*从第一个不等于0的数开始数*/
{
printf("%d",num[n][i]);
ok=1;
}
}
}
int main()
{
/*freopen("out.txt","w",stdout);*/
int n;
get_num();
while(scanf("%d",&n)!=EOF)
{
if(!n) printf("The Fibonacci number for 0 is 0");
else
put_num(n);
printf("\n");
}
return 0;
}