题目链接:点击打开链接
大数高精模板题
按一位最大值10000分,用len数组保存每个数用了多少位
注意一位中数不够1000的要补0
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int a[1005][1005];
int len[1005];
void init(){
memset(a,0,sizeof(a));
for(int i=1;i<=1000;i++){
len[i]=1;
}
a[1][1]=1;
a[2][1]=1;
for(int i=3;i<=1000;i++){
len[i]=len[i-1];
for(int j=1;j<=len[i-1];j++){
a[i][j]+=a[i-1][j]+a[i-2][j];
if(a[i][j]>=10000){
a[i][j+1]+=a[i][j]/10000;
a[i][j]%=10000;
if(j+1>len[i-1]) len[i]++;
}
}
}
}
int main(){
int T;
init();
cin>>T;
while(T--){
int n;
cin>>n;
cout<<a[n][len[n]];
for(int i=len[n]-1;i>=1;i--){
if(a[n][i]<10)cout<<"000";
else if(a[n][i]<100)cout<<"00";
else if(a[n][i]<1000)cout<<0;
cout<<a[n][i];
}
cout<<endl;
}
return 0;
}