
一、核心思路
此问题要解决高精度除低精度,高精度用字符串存储,按位存储到数组中,模拟列竖式除法。
二、代码实现
cpp
const int N = 5010;
int a[N], b, c[N];
int l;
void div(int a[], int b, int c[]) {
ll tmp = 0;
// 从大整数的高位到低位处理
for (int i = l; i >= 1; i--) {
tmp = tmp * 10 + a[i];
c[i] = tmp / b;
tmp = tmp % b;
}
// 处理商的前导零
while (l > 1 && c[l] == 0) l--;
}
int main() {
string s;
cin >> s >> b;
// 反转字符串,便于从低位到高位存储
reverse(s.begin(), s.end());
l = s.size();
// 将字符串逐位存入数组a
for (int i = 1; i <= l; i++) {
a[i] = s[i-1] - '0';
}
div(a, b, c);
// 输出商(从高位到低位)
for (int i = l; i >= 1; i--) {
cout << c[i];
}
return 0;
}