大数相乘的模板题,基本思路类似于笔算竖式乘法的计算
#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; }