高精度乘法思路
令进位为 $t$,大整数为从 $A$,小整数为 $b$,答案为 $C$,则 $C_i = (A_i * b + t) \% 10$,进位 $t$ 为 $(A_i * b + t) {\div} 10$。
图解
知道上面那个很难懂,所以就画了一幅图,这样应该就好理解了吧。
代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
vector<int> mul(vector<int> A, int b)
{
int t = 0;
vector<int> C;
//如果有进位的话,就继续分解进位
//有可能最后一位的进位超过9
for (int i = 0; i < A.size() || t; i ++)
{
if (i < A.size())
t += A[i] * b;
C.push_back(t % 10);
t /= 10;
}
//去前导0
while (C.back() == 0 && C.size() > 1)
C.pop_back();
return C;
}
int main()
{
string a;
int b;
cin >> a >> b;
vector<int> A;
for (int i = a.size() - 1; i >= 0; i --)
A.push_back(a[i] - '0');
auto C = mul(A, b);
for (int i = C.size() - 1; i >= 0; i --)
printf("%d", C[i]);
return 0;
}
好啦,这篇题解到这里就结束啦。感谢观看!!!
$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\mathcal{writer\enspace by \enspace acwing}$ : $\mathfrak{天元之弈}$
非常好,加了图更难理解了(你好歹打字吧啊啊啊)
azzzz
我这字……很抽象吗?可能是因为手绘板的缘故吧……
其实细看还好,但是第一眼看到就是不想看的感觉
影响读者阅读体验hh