题目描述
给定两个非负整数A,B,请你计算 A / B的商和余数。
输入样例
7
2
输出样例
3
1
高精度除法
- 和其他高精度不同, 在进行高精度除法的时候, 是从最高位开始计算的, 而不是像加减乘法一样, 从最低位开始计算, 并且计算进位, 这就导致 div 函数的写法和其他高精度有些区别.
- 首先是需要多传入一个参数 r , 注意要加引用, 使得 r 的值被改变.
- 其次是需要从 A 数组的最后一位, 也就是最高位开始计算.
- 最后需要翻转一下 C 数组, 再去前导零.
C++ 代码
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> div(vector<int> &A, int b, int &r) {
vector<int> C;
r = 0;
for (int i = A.size() - 1; i >= 0; i -- ) {
r = r * 10 + A[i];
C.push_back(r / b);
r %= b;
}
reverse(C.begin(), C.end());
while (C.size() > 1 && C.back() == 0) 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');
int r;
auto C = div(A, b, r);
for (int i = C.size() - 1; i >= 0; i -- ) cout << C[i];
cout << endl;
cout << r << endl;
return 0;
}