B2073 求小数的某一位

· · 题解

分析

这道题其实可以不用 double 型来存储变量。

乍一看题,诶!这不是可以先乘上 10^n , 再除以 b 就搞定了吗?

然后看了一下数据范围: n \leq 10000 ? 哎,不想写高精。

于是就有了如下代码 :

代码

#include<bits/stdc++.h>
using namespace std;
int a,b,n; 
int main()
{
    scanf("%d%d%d",&a,&b,&n);
    for(int i=1;i<=n;i++) a%=b,a*=10;
    a/=b;
    printf("%d",a);
    return 0;
} 

是不是非常简短呢?

解释一下,每次 a \bmod b 其实就是提取该位小数,而 a \times 10 就是整体向左平移一位。

最后再除以 b 就能得到最终的答案了。