题解
【基础】高精度整数除法
1 条题解
-
0
解题思路
题目要求计算 a÷b 并保留前 n 位小数。两个数都很大(10^8 以内),所以不能直接用浮点数,要用高精度的方法。
思路:模拟竖式除法。
我们小学学过的竖式除法是这样的:
- 先算整数部分 a÷b,余数记下来
- 余数乘 10,再除以 b,得到第一位小数
- 新的余数再乘 10、再除以 b,得到第二位小数
- 一直算 n 位
步骤:
- 输出 a/b 得到整数部分,再输出小数点
- 用 t = a % b 得到初始余数
- 循环 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