大数加法和乘法

Posted mch5201314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数加法和乘法相关的知识,希望对你有一定的参考价值。

#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("加法结果为
");
         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("乘法结果为
");
         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("输入两个字符串代表两个数
");
    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("输入两个字符串代表两个数
");
     }
    return 0;
 }

以上是关于大数加法和乘法的主要内容,如果未能解决你的问题,请参考以下文章

大数加法大数乘法

vectorstring实现大数加法乘法

JAVA中解决大数乘法和加法问题

大数加法与大数乘法(字符串形式输入输出)

大数加法 (A + B Problem II)

剑指offer编程题Java实现——面试题12相关题大数的加法减法乘法问题的实现