题目
本题要求计算 A / B A/B A/B,其中 A A A是不超过1000位的正整数, B B B是1位正整数。你需要输出商数 Q Q Q和余数 R R R,使得 A = B ∗ Q + R A=B*Q+R A=B∗Q+R成立。
输入格式:
输入在一行中依次给出 A A A和 B B B,中间以1个空格分隔。
输出格式:
在一行中依次输出 Q Q Q和 R R R,中间以1个空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
思路分析:
- 此题为高精度整数与低精度整数的除法操作,可以模拟手动除法的过程。
代码:
#include <bits/stdc++.h>
using namespace std;
vector<int> div(vector<int> &A, int b, int &r){
vector<int> C;
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 s1;
vector<int> A;
int r = 0, b;
cin >> s1 >> b;
for(int i = s1.size() - 1; i >= 0; i--) A.push_back(s1[i] - 48);
auto C = div(A, b, r);
for(int i = C.size() - 1; i >= 0; i--) cout << C[i];
cout << ' ' << r << endl;
}