大数加法和乘法

#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;
 }

猜你喜欢

转载自www.cnblogs.com/mch5201314/p/10279290.html