xujialin268 @ 2021-08-24 11:26:42
#include<cstdio>
#include<iostream>
using namespace std;
int p[5005][5005],n;
bool t=false;
int main()
{
cin>>n;
if(n<3) cout<<n;
for(int i=3;i<=n;i++)
{
for(int j=1;j<=5000;j++)
p[i][j]=p[i-1][j]+p[i-2][j];
for(int k=1;k<=5000;k++)
while(p[i][k]>=10)
{
p[i][k+1]+=1;
p[i][k]-=10;
}
}
for(int i=5000;i>=1;i--)
{
if(t==false&&p[n][i]==0) continue;
t=true;
cout<<p[n][i];
}
return 0;
}//谢谢啦!!QWQ
by Yikara @ 2021-08-24 11:32:10
高精度
by 0x386 @ 2021-08-24 11:48:07
@xujialin268 把n=1和n=2先存到p数组里
by jltxsfl @ 2021-08-24 12:00:13
@xujialin268 把你的代码改成这样就可以过了,主要就是因为 第0阶 和 第1阶 没有初始化
#include<iostream>
using namespace std;
int p[5005][5005],n;
bool t=true;
int main()
{
cin>>n;
if(n==0){
cout<<"0";
return 0;
}
p[0][1]=1,p[1][1]=1;
for(int i=2;i<=n;i++)
{
for(int j=1;j<=5000;j++)
p[i][j]=p[i-1][j]+p[i-2][j];
for(int k=1;k<=5000;k++)
while(p[i][k]>=10)
{
p[i][k+1]+=1;
p[i][k]-=10;
}
}
for(int i=5000;i>=1;i--)
{
if(t&&p[n][i]==0) continue;
t=false;
cout<<p[n][i];
}
return 0;
}