1. 程式人生 > >高精度之高精度乘法

高精度之高精度乘法

話說高精度乘法真的沒有什麼好介紹的,直接上程式碼:

#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; }

當然對於高精度乘以低精度的話就沒有必要模擬乘法的形式,而可以把低精度數看成一個整體,將它乘到各個位上,再進行進位。