//啥也没有
/*































































*/
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

// 比较两个字符串表示的数字大小,返回1表示a>=b,0表示a<b
bool compare(const string &a, const string &b) {
    if (a.length() != b.length()) return a.length() > b.length();
    for (int i = 0; i < a.length(); i++) {
        if (a[i] != b[i]) return a[i] > b[i];
    }
    return true;
}

// 高精度减法,a>=b
string subtract(string a, string b) {
    int n = a.length(), m = b.length();
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    string res;
    int carry = 0;
    for (int i = 0; i < n; i++) {
        int digitA = a[i] - '0';
        int digitB = i < m ? b[i] - '0' : 0;
        digitA -= carry;
        if (digitA < digitB) {
            digitA += 10;
            carry = 1;
        } else {
            carry = 0;
        }
        res.push_back((digitA - digitB) + '0');
    }
    while (res.size() > 1 && res.back() == '0') res.pop_back();
    reverse(res.begin(), res.end());
    return res;
}

// 高精度除法,返回商和余数
pair<string, string> divide(string a, string b) {
    if (a == "0") return {"0", "0"};
    string quotient;
    string remainder;
    int n = a.length();
    int idx = 0;
    string current;
    while (idx < n) {
        current.push_back(a[idx++]);
        // 去除前导零
        int start = 0;
        while (start < current.length() && current[start] == '0') start++;
        current = current.substr(start);
        if (current.empty()) current = "0";
        if (compare(current, b)) {
            int count = 0;
            string temp = current;
            while (compare(temp, b)) {
                temp = subtract(temp, b);
                count++;
            }
            quotient.push_back(count + '0');
            current = temp;
        } else {
            quotient.push_back('0');
        }
    }
    // 去除商的前导零
    int start = 0;
    while (start < quotient.length() && quotient[start] == '0') start++;
    quotient = quotient.substr(start);
    if (quotient.empty()) quotient = "0";
    // 处理余数
    remainder = current;
    if (remainder.empty()) remainder = "0";
    return {quotient, remainder};
}

int main() {
    //作者junzhe
    string a, b;
    cin >> a >> b;
    if (b == "0") {
        cout << "Invalid: division by zero" << endl;
        return 0;
    }
    auto result = divide(a, b);
    cout << result.first << endl;
    cout << result.second << endl;
    return 0;
}

1 条评论

  • 1

信息

ID
309
时间
1000ms
内存
256MiB
难度
10
标签
(无)
递交数
7
已通过
2
上传者