#include <iostream>
using namespace std;
int a[100010],b[100010],c[200020];
int main(){
string ac,bc;
cin>>ac>>bc;
int al=ac.length();
int bl=bc.length();
两个数相乘后的数的长度不会超过两个数长度的和
int cl=al+bl;
倒插到两个数组里目的是将高位放在数组下标大的地方好进位!下面有图
for(int i=al-1;i>=0;i--)
a[al-i-1]=ac[i]-'0';
for(int i=bl-1;i>=0;i--)
b[bl-i-1]=bc[i]-'0';
计算每一位上的值,先不进位,下面有图解释
for(int i=0;i<al;i++){
for(int j=0;j<bl;j++){
c[i+j]+=a[i]*b[j];
}
}
进行进位
for(int i=0;i<cl;i++){
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
去除前面多出来的零
while(c[cl]<=0&& cl>0)cl--;
for(int i=cl; i>=0; i--)
cout<<c[i];
cout<<endl;
return 0;
}
为啥倒插?
如何计算
为啥去除前导零?