大整数*小数字
vector<int> mul(vector<int> a, int b)
{
vector<int> c;
for (int i = 0, t = 0; i < a.size() || t; i++)
{
if (i < a.size())
t += a[i] * b; // 一次性乘完
c.push_back(t % 10);
t /= 10;
}
return c;
}
大整数*大整数
思路 继续创一个vector数组,此时不是一次性存储的,要用res[i+j]存储上次运算得出的结果
vector<int> mult(vector<int> a, vector<int> b)
{
vector<int> res(a.size() + b.size(), 0);
for (int i = 0; i < a.size(); i++)
{
int carry = 0;
for (int j = 0; j < b.size() || carry; j++)
{
int t = res[i + j] + (j < b.size() ? a[i] * b[j] : 0) + carry;
res[i + j] = t % 10;
carry = t / 10;
}
}
while (res.back() == 0 && res.size() >= 1)
{
res.pop_back();
}
return res;
}
#include <bits/stdc++.h>
using namespace std;
vector<int> mul(vector<int> a, int b)
{
vector<int> c;
for (int i = 0, t = 0; i < a.size() || t; i++)
{
if (i < a.size())
t += a[i] * b; // 一次性乘完
c.push_back(t % 10);
t /= 10;
}
return c;
}
vector<int> mult(vector<int> a, vector<int> b)
{
vector<int> res(a.size() + b.size(), 0);
for (int i = 0; i < a.size(); i++)
{
int carry = 0;
for (int j = 0; j < b.size() || carry; j++)
{
int t = res[i + j] + (j < b.size() ? a[i] * b[j] : 0) + carry;
res[i + j] = t % 10;
carry = t / 10;
}
}
while (res.back() == 0 && res.size() >= 1)
{
res.pop_back();
}
return res;
}
int main()
{
string a;
int b;
string q;
cin >> a >> q;
vector<int> m, n;
vector<int> res;
for (int i = a.size() - 1; i >= 0; i--)
{
m.push_back(a[i] - '0');
}
for (int i = q.size() - 1; i >= 0; i--)
{
n.push_back(q[i] - '0');
}
res = mult(m, n);
for (int i = res.size() - 1; i >= 0; i--)
{
cout << res[i];
}
}