演算法模板:高精度運算(二)
阿新 • • 發佈:2021-02-06
高精度乘法運算
高精度乘法運算一般是指一個很大很大的整數乘以一個不是很大的整數,A*b,一般來說len(A)>1e10,b <1e9;
對於這種形式的運算,我們一般使用陣列來表示A,而用int來儲存b;
運算的時候,用b去乘以A的每一位;
#include<iostream>
#include<vector>
using namespace std;
vector<int> mul(vector<int>&A,int b)
{
vector<int>C;
int t = 0;
for(int i = 0 ; i < A.size()||t; i ++ )
{
if(i < A.size())
t += b * A[i];
C.push_back(t%10);
t = t/10;
}
while(C.size()>1&&C.back() ==0)C.pop_back();
return C;
}
int main(void)
{
string a;
int b ;
cin>>a>> b;
vector<int> A,C;
for(int i= a.size() -1; i >= 0; i --)A.push_back(a[i] - '0');
C = mul(A,b);
for(int i = C.size() -1; i >=0 ; i --)cout<<C[i];
cout<<endl;
}
程式碼分析
if(i < A.size())
t += b * A[i];
C.push_back(t%10);
t = t/10;
在這裡我們定義了一個t來計算進位以及b乘以A的每一位;
首先我們要明白,這個進位可能十分大,所以在A的有效位數計算完成後有可能還沒計算完成,所以得判斷if,然後t%10是當前的位數,t/10就是對下一位的進位;
還有就是b是0的話這個情況子需要特殊考慮一下就好了,不在贅述;