话说高精度乘法真的没有什么好介绍的,直接上代码:
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#include<iostream>
using namespace std;
string a,b;
int c[100001],len;
void change(string a,string b)
{
for(int i=b.size()-1;i>=0;i--) {
int y=b[i]-'0',bit=b.size()-i-1;
for(int j=a.size()-1;j>=0;j--) {
len=a.size()-j+bit;
int x=a[j]-'0';
c[len]+=x*y;
if(c[len] >= 10) {
c[len+1]+=c[len]/10;
c[len]%=10;
}
}
}
}
void print()
{
int i=1;
++len;
while(!c[len]) len--;
while( len ) cout<<c[len--];
}
int main()
{
cin>>a>>b;
if( a == "0" || b == "0" ) {
cout<<'0';
return 0;
}
else if ( a.size() >= b.size() ) {
change ( a , b );
}
else change ( b , a );
print ();
return 0;
}
当然对于高精度乘以低精度的话就没有必要模拟乘法的形式,而可以把低精度数看成一个整体,将它乘到各个位上,再进行进位。