良夜 @ 2020-02-05 17:12:25
#include<iostream>
#include<cstdlib>
#include<string.h>
using namespace std;
int a1[10005]={0},a2[10005]={0},a3[10005]={0};
int n;
int num=1;
void fib()
{
a1[1]=1,a2[1]=2;
for(int i=3;i<=n;i++)
{
memset(a3,0,sizeof(a3));
for(int j=1;j<=num;j++)
{
a3[j]+=a1[j]+a2[j];
a3[j+1]+=a3[j]/10;
a3[j]%=10;
//cout<<a3[j]<<endl;
}
for(int k=1;k<=10005;k++)
if(a3[k]!=0)
num=k;
/* for(int i=num;i>0;i--)cout<<a1[i];
cout<<" ";
for(int i=num;i>0;i--)cout<<a2[i];
cout<<" ";
for(int i=num;i>0;i--)cout<<a3[i];
cout<<" "<<num<<endl;*/
for(int k=1;k<=num;k++)a1[k]=a2[k],a2[k]=a3[k];
}
}
int main()
{
cin>>n;
if(n<3)
{
cout<<n;
return 0;
}
fib();
for(int i=num;i>0;i--)cout<<a3[i];
return 0;
}
by cstdios @ 2020-02-05 17:17:59
@恬淡看风
for(int k=1;k<=10005;k++)
这个语句会RE,你的数组会越界。
by 良夜 @ 2020-02-05 17:22:16
@cstdios 点睛之笔,的确是这个原因