题解 B2073 【求小数的某一位】

题目描述

分数 ab\dfrac{a}{b} 化为小数后,小数点后第 nn 位的数字是多少?

分析

回一下小学时求 17\dfrac{1}{7} 小数点后第三位的竖式计算:

0.14271.0007    30  28  20146\begin{aligned}0.142\\7\sqrt{1.000}\\7\ \ \ \ \\---\\30\ \ \\28\ \ \\---\\20\\14\\---\\6\end{aligned}

记小数点后第 ii 位为 aia_i,第 ii 位的余数为 rir_i。此例中 b=7b=7

可以发现,结果的每一位都是由前一位所得的余数乘以 1010 除以 77 取整得到的,即 ai=ri1×10ba_i=\left\lfloor\dfrac{r_{i-1}\times 10}{b}\right\rfloor,于是,我们只需要记录前 n1n-1 位的余数,乘以 1010 再除以 77 取整就可以得到小数点后第 nn 位。

计算第 ii 位的余数时,我们只需要像竖式中的过程一样,把上一位的余数乘以 1010,再对 77 取模就是第 ii 位的余数,即 ri=ri1×10mod7r_i=r_{i-1}\times 10\mod 7

然而,这题数据一开始是错的,现在题面改了,所以我们要特判 a=ba=b 的情况,此时输出 00

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b,n;
    cin>>a>>b>>n;
    if(a==b){
        cout<<0;
        return 0;
    }
    for(int i=1;i<n;i++)
        a=a*10%b;//我在这里把a和r合起来用
    cout<<a*10/b;
	return 0;
}
posted @ 2021-07-14 18:22  luckydrawbox  阅读(38)  评论(0)    收藏  举报  来源