大数乘法(两数都是字符串)
作者:
xcn
,
2025-04-02 09:33:51
·辽宁
,
所有人可见
,
阅读 7
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
string A,B;
vector<int>a, b;
vector<int> add(vector<int> a, vector<int> b)
{
vector<int> c;
int t = 0;
for(int i = 0; i < a.size() || i < b.size(); i ++)
{
if(i < a.size()) 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;
}
vector<int> mul(vector<int> a, vector<int> b)
{
vector<int> sum;
sum.push_back(0);
for(int i = 0; i < b.size() ; i ++)
{
int x = b[i];
vector<int> c;
int p = i;
while(p--) c.push_back(0);
int t = 0;
for(int j = 0; j < a.size(); j ++)
{
t += x * a[j];
c.push_back(t%10);
t /= 10;
}
if(t)
c.push_back(t);
sum = add(sum, c);
}
while(sum.size() > 1 && sum.back() == 0) sum.pop_back();
return sum;
}
int main()
{
cin >> 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');
auto c = mul(a,b);
for(int i = c.size() - 1; i >= 0; i --) printf("%d",c[i]);
return 0;
}