就是说,用了一个比较独特的方法,本来只是想去试试,没想到一把过,于是写出来分享一下。
思路其实就是完全按照小学基础的乘法算数,用b的每一位数去依次乘以A的每一位,最终得出的结果进行错位相加。
#include <iostream>
#include <vector>
using namespace std;
const int N=1e6+10;
vector<int> add(vector<int> &A, vector<int> &B)
{
if (A.size() < B.size()) return add(B, A);
vector<int> C;
int t = 0;
for (int i = 0; i < A.size(); i ++ )
{
t += A[i];
if (i < B.size()) t += B[i];
C.push_back(t % 10);
t /= 10;
}
if (t) C.push_back(t);
return C;
}
int main()
{
string a,b;
cin>>a>>b;
vector<int> A,B;
for(int i=a.size()-1;i>=0;i--)
A.push_back(a[i]-'0');
for(int i=b.size()-1;i>=0;i--)
B.push_back(b[i]-'0');
vector<int> C;
C.push_back(0);
for(int i=0;i<B.size();i++)
{
vector<int> T;
for(int k=0;k<i;k++)
T.push_back(0);
for(int j=0,t=0;j<A.size();j++)
{
int w=A[j]*B[i];
T.push_back(w%10+t);
t=w/10;
if(t!=0&&j==A.size()-1)
T.push_back(t);
}
C=add(C,T);
while(C.back()==0&&C.size()>1) C.pop_back();
}
for(int i=C.size()-1;i>=0;i--)
cout<<C[i];
}