大數加法和乘法
阿新 • • 發佈:2019-01-16
+= mem oid times ans ont end tin continue
#include<bits/stdc++.h> using namespace std; const int N=1e5+10; int ans[N]; string a,b; int x[N],y[N]; void Plus(int ma){ memset(ans,0,sizeof(ans)); printf("加法結果為\n"); for(int i=0;i<ma;i++) ans[i]+=x[i]+y[i]; for(int i=0;i<=ma;i++) if(ans[i]>=10) { ans[i+1]+=ans[i]/10; ans[i]%=10; } bool flag=0; for(int i=ma+1;i>=0;i--) { if(flag) cout<<ans[i]; else if(ans[i]&&!flag){ cout<<ans[i]; flag=1; } else continue; } cout<<endl; } void times(int la,int lb){ memset(ans,0,sizeof(ans)); for(int i=la-1;i>=0;i--) for(int j=lb-1;j>=0;j--){ ans[i+j]+=x[i]*y[j]; } for(int i=0;i<la+lb;i++) if(ans[i]>=10){ ans[i+1]+=ans[i]/10; ans[i]%=10; } bool flag=0; printf("乘法結果為\n"); for(int i=la+lb;i>=0;i--){ if(flag) cout<<ans[i]; else if(ans[i]&&!flag){ cout<<ans[i]; flag=true; } else continue; } cout<<endl; } int main(){ printf("輸入兩個字符串代表兩個數\n"); while(cin>>a>>b){ int la=a.length(),lb=b.length(); int ma=max(la,lb); memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); int cnt=0; for(int i=la-1;i>=0;i--) x[cnt++]=a[i]-‘0‘; cnt=0; for(int i=lb-1;i>=0;i--) y[cnt++]=b[i]-‘0‘; Plus(ma); times(la,lb); printf("輸入兩個字符串代表兩個數\n"); } return 0; }
大數加法和乘法