P8652 [蓝桥杯 2017 国 C] 小数第 n 位

题目描述

我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。

如果我们把有限小数的末尾加上无限多个 000,它们就有了统一的形式。

本题的任务是:在上面的约定下,求整数除法小数点后的第 nnn 位开始的 333 位数。

输入格式

一行三个整数:aaabbbnnn,用空格分开。aaa 是被除数,bbb 是除数,nnn 是所求的小数后位置(0<a,b,n<1090<a,b,n<10^90<a,b,n<109

输出格式

一行 333 位数字,表示:aaa 除以 bbb,小数后第 nnn 位开始的 333 位数字。

输入输出样例 #1

输入 #1

1 8 1

输出 #1

125

输入输出样例 #2

输入 #2

1 8 3

输出 #2

500

输入输出样例 #3

输入 #3

282866 999000 6

输出 #3

914

说明/提示

时限 1 秒, 256M。蓝桥杯 2017 年第八届国赛

C++实现

#include <cstdio>
typedef long long ll;
inline int ksm(int a, int b, int mod)
{
    int ret = 1;
    while (b)
    {
        if (b & 1) 
			ret = (ll)ret * a % mod;
        a = (ll)a * a % mod; b >>= 1;
    }
    return ret;
}
int main()
{
    int a, b, n; 
	scanf("%d%d%d", &a, &b, &n);
    int t = (ll)a * ksm(10, n - 1, b) % b;
    printf("%d", (int)(t * 10ll / b));
    t = t * 10ll % b;
    printf("%d", (int)(t * 10ll / b));
    t = t * 10ll % b;
    printf("%d\n", (int)(t * 10ll / b));
    return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

更多推荐