啥都不說直接上板子吧 QAQios
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<cstdlib> using namespace std; const int N=100100; int len; int c[N],a[N],b[N]; string s,s1; //高精加法 inline void add(int a[],int b[]) { int len=max(a[0],b[0]); for(int i=1;i<=len;++i) { c[i]=a[i]+b[i]+c[i]; if(c[i]>=10) { c[i]%=10; ++c[i+1]; } } if(c[len+1]!=0) len++;//最少有len位,最多有len+1位,判斷一下有多少位 for(int i=len;i>=1;--i) printf("%d",c[i]); memset(c,0,sizeof len+10);//清空 } //高精減法 inline void sub(int a[],int b[],bool vis) { int len=a[0]; for(int i=1;i<=len;++i) { if(a[i]<b[i]) { --a[i+1]; a[i]+=10; } c[i]=a[i]-b[i]; } if(vis) printf("-"); while ((c[len]==0&&(len>1))) len--; for(int i=len;i>=1;--i) printf("%d",c[i]); } inline void sub_(int a[],int b[]) { if(a[0]>b[0]) sub(a,b,0);//判斷一下誰大誰小 if(a[0]<b[0]) sub(b,a,1); int len=a[0]; if(a[0]==b[0]) { while (len) { if(a[len]>b[len]) { sub(a,b,0); break; } if(a[len]<b[len]) { sub(b,a,1); break; } len--; } } if(len==0) printf("0");//相等輸出0 } //高精乘法 inline void mul(int a[],int b[]) { for(int i=1;i<=a[0];++i) { int x=0; for(int j=1;j<=b[0];++j) { c[i+j-1]=a[i]*b[j]+x+c[i+j-1]; x=c[i+j-1]/10; c[i+j-1]%=10; } c[i+b[0]]=x; } len=a[0]+b[0]; while(c[len]==0&&len>1) --len; for(int i=len;i>=1;--i) printf("%d",c[i]); } //預處理 inline void init(string &x,int a[]) { a[0]=x.length();//string 應該是從string[0]開始存的吧 for(int i=0;i<a[0];++i) a[a[0]-i]=x[i]-'0'; } int main() { cin>>s>>s1; init(s,a); init(s1,b); add(a,b);//a+b printf("\n"); mul(a,b);//a*b printf("\n"); sub_(a,b);//a-b printf("\n"); return 0; }