高精度乘法(板子)
#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