题目

本题要求计算 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=BQ+R成立。

输入格式:

输入在一行中依次给出 A A A B B B,中间以1个空格分隔。

输出格式:

在一行中依次输出 Q Q Q R R R,中间以1个空格分隔。

输入样例:

123456789050987654321 7

输出样例:

17636684150141093474 3

思路分析:

  1. 此题为高精度整数与低精度整数的除法操作,可以模拟手动除法的过程。

代码:

#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;
}

PAT_BasicLevel