51 lines
983 B
C++
51 lines
983 B
C++
#include <bits/stdc++.h>
|
|
|
|
using namespace std;
|
|
const int N = 1e5 + 10;
|
|
const int WIDTH = 4; // 压4位
|
|
const int BASE = 10000; // 基数为10000
|
|
|
|
int a[N], al;
|
|
int b;
|
|
|
|
// 字符串转压位数组(逆序存储)
|
|
void str2num(string s, int c[], int &cl) {
|
|
cl = 0;
|
|
for (int i = s.length() - 1; i >= 0; i -= WIDTH) {
|
|
int v = 0;
|
|
int st = max(i - WIDTH + 1, 0); // 最后一组可能不够4个长度
|
|
for (int j = st; j <= i; j++)
|
|
v = v * 10 + (s[j] - '0');
|
|
c[cl++] = v;
|
|
}
|
|
}
|
|
|
|
// 高精度乘以低精度
|
|
void mul(int a[], int &al, int b) {
|
|
int t = 0;
|
|
for (int i = 0; i < al; i++) {
|
|
t += a[i] * b;
|
|
a[i] = t % BASE;
|
|
t /= BASE;
|
|
}
|
|
|
|
if (t)
|
|
a[al++] = t;
|
|
|
|
while (al > 1 && a[al - 1] == 0)
|
|
al--;
|
|
}
|
|
|
|
int main() {
|
|
string x;
|
|
cin >> x >> b;
|
|
|
|
str2num(x, a, al);
|
|
mul(a, al, b);
|
|
|
|
printf("%d", a[al - 1]);
|
|
for (int i = al - 2; i >= 0; i--)
|
|
printf("%04d", a[i]);
|
|
|
|
return 0;
|
|
} |