32 条题解
-
0
#include <bits/stdc++.h> using namespace std; string n,m; string cheng(string n,string m) { string k=""; int *a,*b,*f,la=n.size(),lb=m.size(),lf=la+lb; a=new int[la+1]; b=new int[lb+1]; f=new int[lf+1]; for(int i=1;i<=la;i++) a[i]=0; for(int i=1;i<=lb;i++) b[i]=0; for(int i=1;i<=lf;i++) f[i]=0; for(int i=la-1;i>=0;i--) a[la-i]=n[i]-'0'; for(int i=lb-1;i>=0;i--) b[lb-i]=m[i]-'0'; for(int i=1;i<=la;i++) for(int j=1;j<=lb;j++) f[i+j-1]+=a[i]*b[j]; for(int i=1;i<=lf;i++) { f[i+1]+=f[i]/10; f[i]%=10; } while(f[lf]==0&&lf>1) lf--; for(int i=lf;i>=1;i--) k=k+char(f[i]+'0'); return k; } string jia(string n,string m) { string k=""; int *f,*a,*b,la=n.size(),lb=m.size(),lf=max(la,lb)+1; a=new int[lf+1]; b=new int[lf+1]; f=new int[lf+1]; for(int i=1;i<=lf;i++) a[i]=0; for(int i=1;i<=lf;i++) b[i]=0; for(int i=1;i<=lf;i++) f[i]=0; for(int i=1;i<=la;i++) a[i]=n[la-i]-'0'; for(int i=1;i<=lb;i++) b[i]=m[lb-i]-'0'; for(int i=1;i<=lf;i++) { f[i]+=a[i]+b[i]; if(f[i]>=10) { f[i]-=10; f[i+1]++; } } if(f[lf]==0) lf--; for(int i=lf;i>=1;i--) k=k+char(f[i]+'0'); return k; } string jian(string n,string m) { string k=""; int *a,*b,*f,la=n.size(),lb=m.size(),lf; if(lb>la||la==lb&&n<m) { swap(n,m); swap(la,lb); cout<<'-'; } lf=la; a=new int[lf+1]; b=new int[lf+1]; f=new int[lf+1]; for(int i=1;i<=lf;i++) a[i]=0; for(int i=1;i<=lf;i++) b[i]=0; for(int i=1;i<=lf;i++) f[i]=0; for(int i=1;i<=la;i++) a[i]=n[la-i]-'0'; for(int i=1;i<=lb;i++) b[i]=m[lb-i]-'0'; for(int i=1;i<=lf;i++) { if(a[i]<b[i]) { a[i+1]--; a[i]+=10; } f[i]=a[i]-b[i]; } while(f[lf]==0&&lf>1) lf--; for(int i=lf;i>=1;i--) k=k+char(f[i]+'0'); return k; } int sub(int *a,int *b,int La,int Lb) { if(La<Lb) return -1; if(La==Lb) { for(int i=La-1;i>=0;i--) if(a[i]>b[i]) break; else if(a[i]<b[i]) return -1; } for(int i=0;i<La;i++) { a[i]-=b[i]; if(a[i]<0) a[i]+=10,a[i+1]--; } for(int i=La-1;i>=0;i--) if(a[i]) return i+1; return 0; } string div(string n1,string n2,bool nn) { const int L=1e5; string s,v; int a[L],b[L],r[L],La=n1.size(),Lb=n2.size(),i,tp=La; fill(a,a+L,0);fill(b,b+L,0);fill(r,r+L,0); for(i=La-1;i>=0;i--) a[La-1-i]=n1[i]-'0'; for(i=Lb-1;i>=0;i--) b[Lb-1-i]=n2[i]-'0'; if(La<Lb||(La==Lb&&n1<n2)) { if(nn) return "0"; else return n1; } int t=La-Lb; for(int i=La-1;i>=0;i--) if(i>=t) b[i]=b[i-t]; else b[i]=0; Lb=La; for(int j=0;j<=t;j++) { int temp; while((temp=sub(a,b+j,La,Lb-j))>=0) { La=temp; r[t-j]++; } } for(i=0;i<L-10;i++) r[i+1]+=r[i]/10,r[i]%=10; while(!r[i]) i--; while(i>=0) s+=r[i--]+'0'; i=tp; while(!a[i]) i--; while(i>=0) v+=a[i--]+'0'; if(v.empty()) v="0"; if(nn==1) return s; else return v; } string h(string n,char w,string m) { if(w=='+') return jia(n,m); else if(w=='*') return cheng(n,m); else if(w=='-') return jian(n,m); else if(w=='/') return div(n,m,1); else return div(n,m,0); } int main() { ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); cin>>n>>m; cout<<h(n,'+',m)<<endl; cout<<h(n,'-',m)<<endl; cout<<h(n,'*',m)<<endl; cout<<h(n,'/',m)<<endl; cout<<h(n,'%',m); return 0; }
信息
- ID
- 1
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- (无)
- 递交数
- 535
- 已通过
- 284
- 上传者