高精度乘法(板子)

#include<bits/stdc++.h>
using namespace std;
string a,b;
void getmul(){
    vector<int>v(a.size()+b.size()-1);///两个数相乘位数最多为两个数位数相加,又数组从0开始记录所以减一
    for(int i=0;i<a.size();i++){///这里是从左往右,虽然和我们的以前默认的计算顺序不一样,但方法是类似的
        int x=a[i]-'0';
        for(int j=0;j<b.size();j++){
            int y=b[j]-'0';
            v[i+j]+=x*y;///i+j表示放到乘完后相应的位置,这里先不用考虑进位
        }
    }
    int add=0;///记录进位
    for(int i=v.size()-1;i>=0;i--){///从低位开始往前进位
        v[i]=v[i]+add;
        add=v[i]/10;
        v[i]%=10;
    }
    while(add!=0){///如果进位不为0,往前添加
        int now=add%10;
        v.insert(v.begin(),now);
        add/=10;
    }
    for(int i=0;i<v.size();i++){
        cout<<v[i];
    }
    cout<<endl;
}
int main(){
    cin>>a>>b;
    getmul();
}

这里写一个模拟过程,加深一下印象。

eg       35

       x   63

———————————

     18   9  

          30  15

———————————

     18  39  15 

_____________________

      2 2 0 5

posted @ 2020-08-29 12:24  mohari  阅读(128)  评论(0编辑  收藏  举报