打卡信奥刷题(3259)用C++实现信奥题 P8652 [蓝桥杯 2017 国 C] 小数第 n 位
·
P8652 [蓝桥杯 2017 国 C] 小数第 n 位
题目描述
我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。
如果我们把有限小数的末尾加上无限多个 000,它们就有了统一的形式。
本题的任务是:在上面的约定下,求整数除法小数点后的第 nnn 位开始的 333 位数。
输入格式
一行三个整数:aaa,bbb,nnn,用空格分开。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考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
更多推荐

所有评论(0)