高精模板
加法
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=600; char x[maxn],y[maxn]; int a[maxn],b[maxn],c[maxn]; int m; int main() { scanf("%s",x); scanf("%s",y); int lena=strlen(x); int lenb=strlen(y); for(int i=0;i<lena;i++) { a[lena-i]=(int)(x[i]-48); } for(int i=0;i<lenb;i++) { b[lenb-i]=(int)(y[i]-48); } m=max(lena,lenb); for(int i=1;i<=m;i++) { c[i]+=a[i]+b[i]; if(c[i]>=10) { c[i+1]+=c[i]/10; c[i]%=10; } } if(c[m+1]) m++; for(int i=m;i>=1;i--) { printf("%d",c[i]); } return 0; }
P1255 数楼梯
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; const int maxn=5020; int n; ll f[maxn][5003]; int len=1; int i; void goon(int x) { for(i=1;i<=len;i++) { f[x][i]=f[x-1][i]+f[x-2][i]; } for(int i=1;i<=len;i++) { if(f[x][i]>=10) { f[x][i+1]+=f[x][i]/10; f[x][i]%=10; } } if(f[x][len+1]) len++; } int main() { scanf("%d",&n); f[1][1]=1;f[2][1]=2; for(int j=3;j<=n;j++) { goon(j); } for(int i=len;i>=1;i--) { printf("%d",f[n][i]); } return 0; }
乘法
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; char s[20100]; int a[20100],b[20100]; int c[20100]; int len1,len2; int main() { scanf("%s",s); len1=strlen(s); if(len1==1&&s[0]=='0') { printf("0"); return 0; } /*for(int i=len1-1;i>=0;i--) { a[i]=s[i]-'0'; }*/ for(int i=0;i<len1;i++) a[i]=s[len1-i-1]-'0'; scanf("%s",s); len2=strlen(s); if(len2==1&&s[0]=='0') { printf("0"); return 0; } /*for(int i=len2-1;i>=0;i--) { b[i]=s[i]-'0'; }*/ for(int i=0;i<len2;i++) b[i]=s[len2-i-1]-'0'; for(int i=0;i<len1;i++) { for(int j=0;j<len2;j++) { c[i+j]+=a[i]*b[j]; } } int high=len1+len2-1; for(int i=0;i<high;i++) { if(c[i]>=10) { c[i+1]+=c[i]/10; c[i]=c[i]%10; } } if(c[high]) high++; for(int i=high-1;i>=0;i--) { printf("%d",c[i]); } return 0; }