#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
int fib[1000][601];//第一个下标代表第几个斐波那契数,第二个下标为存储斐波那契大数的数组
void Fib()//求前1000位斐波那契数
{
int i,j;
memset(fib,0,sizeof(fib));
fib[1][600]=1;
fib[2][600]=1;
for(i=3;i<=1000;i++)
{
int carry=0;//进制数
for(j=600;j>=0;j--)
{
fib[i][j]=(fib[i-1][j]+fib[i-2][j]+carry)%10;
carry=(fib[i-1][j]+fib[i-2][j])/10;
}
}
}
int main()
{
int n,i;
Fib();
//printf("请输入小于1000的数\n");
while(scanf("%d",&n)&&n<1000)
{
i=0;
while(fib[n][i]==0)//查找首位非零数的下标
i++;
while(i<=600)
printf("%d",fib[n][i++]);
printf("\n");
}
return 0;
}
利用二维数组求斐波那契大数
最新推荐文章于 2021-05-24 09:24:27 发布