高精度之高精度乘法
阿新 • • 發佈:2019-01-08
話說高精度乘法真的沒有什麼好介紹的,直接上程式碼:
#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;
}
當然對於高精度乘以低精度的話就沒有必要模擬乘法的形式,而可以把低精度數看成一個整體,將它乘到各個位上,再進行進位。