记得不久前的一场实验室收钱大赛中,出现了一个六位有效数字,以及迷之坑点0 , 0 的数据,jnf这次吸取了教训,所以。。。他准备再卡一下小数点。当然此题不会太难,jnf友情的提示学弟学妹们,这题。。是很简单(^_^)的!
jnf遇到了一个问题:将分数a/b化为小数后,小数点后第n位的数字是多少?
因为这是第一道题,我们已经不指望你能够帮上他了。。。
当然如果你们暴力过了,算我jnf输!
输入多组测试数据,处理到文件结束。(测试数据<=10组) 每组测试例包含三个整数a,b,n,相邻两个数之间用单个空格隔开,其中0 <= a <1e8,0 < b <= 1e8,1 <= n <= 1e8。
输出对于每组数据,输出a/b的第n位数,占一行。
样例输入1: 1 2 1 1 2 2 样例输出1 5 0 ———————————————————————————————— 模拟除法的过程,首先a%b,处理a>b的情况,然后求第n为小数,就把n扩大10^(n-1)变成t,这样的话用t%b,得到一个余数r,然后用r除以b得到的商就是所要的答案。 还有一个问题就是10的(n-1)次幂极有可能很大而超出范围,所以用快速幂求出10^(n-1)%b #include<stdio.h> long long b; long long qpow(long long p,long long q) { long long ans=1; while(q) { if(q%2) ans=(ans*p)%b; p=p*p%b; q=q/2; } return ans%b; } int main() { long long a,n; while(scanf("%lld%lld%lld",&a,&b,&n)!=EOF) { long long t=a%b*qpow(10,n-1)%b; long long ans=t*10/b; printf("%lld\n",ans); } return 0; }