A40829. 小数第n位
填空题
困难
知识点
题目描述
小数第n位
题目描述
我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。
如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式。
本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数。
输入:
一行三个整数:a b n,用空格分开。a是被除数,b是除数,n是所求的小数后位置(0<a,b,n<1000000000)
输出:
一行3位数字,表示:a除以b,小数后第n位开始的3位数字。
比如:
输入:
1 8 1
程序应该输出:
125
再比如:
输入:
1 8 3
程序应该输出:
500
再比如:
输入:
282866 999000 6
程序应该输出:
914
提交时,注意选择所期望的编译器类型。
参考答案
void solve() {
ll a, b, n;
cin >> a >> b >> n;
a %= b;
while (n > 10) {
a *= 1E10; a %= b; n -= 10;
}
for (int i = 0; i < n + 2; ++i) {
a *= 10;
if (i >= n - 1)cout << a / b;
a %= b;
}
}答案解析
模拟除法。
13 / 7 = 1.85714285...
这里求小数部分,所有取模忽略掉整数部分
13 / 7 -> 6 / 7
第一位:(小数点后第几位,以下同)6 * 10 / 7 = 8;
得到第一位后的余数:6 * 10 % 7 = 4
那么第二位:4 * 10 / 7 = 5
得到第二位后的余数:4 * 10 % 7 = 5
第三位:5 * 10 / 7 = 7
依此类推
上一题
下一题