#include<bits/stdc++.h>
//#include<algorithm>
using namespace std;
string a, b; // 存数字
int A[2010], B[2010], C[4010];
int main() {
cin >> a >> b;
int lena = a.size(), lenb = b.size();
for(int i = 0; i < lena; i++) A[i] = a[i] - '0';
for(int i = 0; i < lenb; i++) B[i] = b[i] - '0';
//转换成整数 存进数组
// 翻转数组 两种
// for(int i = 0; i < lena / 2; i++) swap(A[i], A[lena -1 - i]);
reverse(A, A + lena);
reverse(B, B + lenb);
// 模板
//高精度 * 高精度 O(n^2) 高精度乘法 可以用多项式来做 O(nlogn) 省选知识点
for(int i = 0; i < lena; i++)
for(int j = 0; j < lenb; j++) {
// 相乘 放在对应的位置 i+ j
C[i + j] += A[i] * B[j];
}
//此时 把每一位该有的数字都处理好了
for(int i = 0; i < lena + lenb; i++) {
C[i + 1] += C[i] / 10;
C[i] %= 10; //对10取余 得到这一位的数值
}
int ed = lena + lenb - 1;
while(ed > 0 && C[ed] == 0) ed--;
for(int i = ed; i >= 0; i--) cout << C[i];
}
高精度除以低精度
#include<bits/stdc++.h>
using namespace std;
long long A[10100];
long long C[10010];
long long b;
long long r;
string a;
int main() {
cin >> a >> b;
int lena = a.size();
for(int i = 0; i < lena; i++) {
A[i] = a[i] - '0';
}
//除法运算不需要逆序存储
for(int i = 0; i < lena; i++) {
r = r * 10 + A[i]; //当前的被除数
C[i] = r / b;
r %= b;
}
//算完了
int st = 0 ;
while(st < lena - 1 && C[st] == 0) st++;
for(int i = st; i < lena; i++) {
cout << C[i];
}
}