大数相乘的模板题,基本思路类似于笔算竖式乘法的计算
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
string a,b;
int ans[100];
void init(){
memset(ans,0,sizeof(ans));
}
void mul(string a,string b){
//交换位置,使得a数的长度比b大
if(a.length()<b.length()){
string temp = a;
a = b;
b = temp;
}
for(int i = 0;i<b.length();i++){
for(int j = 0;j<a.length();j++){
//注意字符串指针的位置
ans[i+j] += ((a[a.length()-1-j]-'0')*(b[b.length()-1-i]-'0'));
if(ans[i+j]>=10){//处理进位
int tmp = ans[i+j];
ans[i+j] = tmp%10;
ans[i+j+1] += tmp/10;
}
}
}
}
void print(){
bool zero = false;
for(int i=100-1;i>=0;i--){
if(ans[i]!=0 && !zero){//去掉前导0
zero = true;
}
if(zero) printf("%d",ans[i]);
}
}
int main(){
init();
cin>>a>>b;
mul(a,b);
print();
cout<<endl;
return 0;
}