1 条题解
-
1
很经典的高精度加法问题,不难但值得一练
#include<bits/stdc++.h> using namespace std; int a[9990],b[9990],c[9990],ans[9990],cda,cdb,cdc,cdans;//cdxx是指xx的长度 void jia()//将a+b的结果存到c中 { int x=1,n=0,i,j; for(i=1;i<=max(cda,cdb);i++) { c[i]=a[i]+b[i]+n; if(n!=0) n=0; if(c[i]>=10) { c[i]-=10; n++; } } if(n==1) {c[max(cda,cdb)+1]=1;cdc++;} } void jiaans()//将c+ans的结果存在ans中 { int x=1,n=0,i,j; for(i=1;i<=max(cdc,cdans);i++) { ans[i]=ans[i]+c[i]+n; if(n!=0) n=0; if(ans[i]>=10) { ans[i]-=10; n++; } } if(n==1) {ans[max(cdc,cdans)+1]=1;cdans++;} } int main() { freopen("fbnq.in","r",stdin); freopen("fbnq.out","w",stdout); int z; cin>>z; if(z==1){ cout<<1; return 0; } if(z==2){ cout<<2; return 0; } a[1]=1; b[1]=1; ans[1]=2; cda=1; cdb=1; cdc=1; cdans=1; for(int I=3;I<=z;I++) { jia(); jiaans(); cda=cdb; cdb=cdc; for(int II=1;II<=cda;II++) a[II]=b[II]; for(int II=1;II<=cdb;II++) b[II]=c[II];//b存到a c存到b 实现循环 } for(int II=cdans;II>=1;II--) cout<<ans[II]; }
- 1
信息
- ID
- 494
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 175
- 已通过
- 33
- 上传者