测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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

 

依此类推

上一题 下一题