1 条题解

  • 0
    @ 2026-11-1 19:56:15

    高精度除法(高精除以单精)(High Precision Division I) 题解

    思路分析

    模拟竖式除法:从高位到低位逐位扫描大整数 aa,用 long long 维护当前余数 rem = rem * 10 + (c - '0'),当前位商为 rem / b,然后令 rem %= b(注意 b≤109b \le 10^9 时 rem * 10 最大约 101010^{10},必须用 long long!)。最后去除结果的前导零;若全部为 0(如 a<ba < b)则保留一个 "0"。时间复杂度 O(∣a∣)O(|a|)。

    参考代码

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        string a;
        long long b;
        if (!(cin >> a >> b)) return 0;
        string q;
        long long rem = 0;
        for (char c : a)
        {
            rem = rem * 10 + (c - '0');
            long long d = rem / b;
            rem %= b;
            if (!q.empty() || d > 0) q.push_back(char('0' + d));
        }
        if (q.empty()) q = "0";
        cout << q << "\n";
        return 0;
    }
    
    • 1

    高精度除法(高精除以单精)(High Precision Division I)

    信息

    ID
    8571
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者