题目描述
我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。
如果我们把有限小数的末尾加上无限多个 0,它们就有了统一的形式。
本题的任务是:在上面的约定下,求整数除法小数点后的第 n 位开始的 3 位数。
输入描述
输入一行三个整数:a b n,用空格分开。a 是被除数,b 是除数,n 是所求的小数后位置(0<a,b,n<109)
输出描述
输出一行 3 位数字,表示:a 除以 b,小数后第 n 位开始的 3 位数字。
输入输出样例
示例
输入
1 8 1
输出
125
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
解析:
要求第 n 位开始的 3 位数字,将该数乘上10^n-1,取整数部分后三位即可。
需要对10进行快速幂。
#include <iostream>
#include<string>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
const ll MAX = 1e5 + 4;
const ll INF = 1e9;
ll ksm(ll p, ll m)
{
ll a = 10;
ll ans = 1;
while (p)
{
if (p & 1)
{
ans = ans*a%m;
}
a = a*a%m;
p >>= 1;
}
return ans;
}
int main()
{
ll a, b, n;
cin >> a >> b >> n;
ll ans=ksm(n + 2,b*1000);
cout << a*ans/b%1000 << endl;
return 0;
}