因为斐波那契额数列 n要是大的话 后面超过了基本数据类型范围
所以只能用字符串 或者字符数组来解决
int a[i[j];
i代表了斐波那契中 第几位
j则是代表了数字的内容
j从0到1000 是从低位存储 一直到高位
所以我们最后要求出第几项的时候 我们循环是要倒序输出的
当然在输出时候 找到开始不为0的第一项 循环从高位开始
for(i=1000;i>=0;i--) //n则是我们要求的第n个斐波那契数
{
if(a[n][i])
break;
}
代码
#include <bits/stdc++.h>
using namespace std;
int a[1001][1001];
int z;
void Fibonacci(int n)
{
int i,j,sum=0;
memset(a,0,sizeof(a)); //初始化二维数组a
a[1][0]=1;
a[2][0]=1;
for(i=3;i<=n;i++) // i 表示第i个数
{
for(j=0;j<1001;j++) //8
{ //13
sum+=a[i-1][j]+a[i-2][j];
a[i][j]=sum%10; //将大数倒着存入数组中 //28,657 第23个数
sum/=10; //46,368 第24个数
} //75,025 从低位开始计算 j=0
}
for(i=1000;i>=0;i--) //遍历数组,找到开始不为0的第一项 循环从高位开始
{
if(a[n][i])
break;
}
printf("%d",a[n][i--]); // 将大数输出
for(j=i;j>=0;j--) //倒序输出 从高位开始倒序输出
{
printf("%d",a[n][j]);
}
printf("\n");
}
int main()
{
while(scanf("%d",&z)!=EOF)
Fibonacci(z);
return 0;
}