top1编程
← 返回题目
题解

【基础】高精度整数除法

1 条题解

  • 0
    @ 2026-7-31 11:44:38

    解题思路

    题目要求计算 a÷b 并保留前 n 位小数。两个数都很大(10^8 以内),所以不能直接用浮点数,要用高精度的方法。

    思路:模拟竖式除法。

    我们小学学过的竖式除法是这样的:

    1. 先算整数部分 a÷b,余数记下来
    2. 余数乘 10,再除以 b,得到第一位小数
    3. 新的余数再乘 10、再除以 b,得到第二位小数
    4. 一直算 n 位

    步骤:

    1. 输出 a/b 得到整数部分,再输出小数点
    2. 用 t = a % b 得到初始余数
    3. 循环 n 次:
      • t = t × 10
      • 输出 t / b 作为这一位小数
      • t = t % b 更新余数

    为什么余数乘 10? 因为除数是 b,要算小数第 i 位,就是把余数扩大 10 倍再除,跟竖式里补一个 0 再除是一个道理。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int a, b, t, n;
        cin >> a >> b >> n;
    
        cout << a / b << ".";  // 整数部分和点
        t = a % b;             // 余数
    
        for (int i = 0; i < n; i++) {
            t = t * 10;      // 余数乘 10
            cout << t / b;   // 这一位小数
            t = t % b;       // 新的余数
        }
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N),只需要循环 n 次算 n 位小数
    • 空间复杂度:O(1)
    • 1