题目描述
OJ地址 http://lx.lanqiao.cn/problem.page?gpid=T456
我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。
如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式。
本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数。
输入:
一行三个整数:a b n,用空格分开。a是被除数,b是除数,n是所求的小数后位置(0<a,b,n<1000000000)
输出:
一行3位数字,表示:a除以b,小数后第n位开始的3位数字。
样例输入1:
1 8 1
样例输出1:
125
样例输入2:
282866 999000 6
样例输出2:
914
思路:
直接模拟除法的运算吧,其实就是对每次运算后的余数 r 进行判断,比如 是被除数a ,除数为b。
首先a对b取整,得到小数点前边的整数部分,然后余数 r = a % b。r肯定小于b了,然后 r * 10 是下一个操作的被除数,除数依然是 b ,此时,余数 r = r * 10 -(( r*10) / b)*b。其中 (r * 10) /b 得到的是当前位的小数,这里纯粹就是模拟数学计算中的操作,自己拿笔写一写就出来了。
当循环到第n位了,开始输出小数,循环到n+2为止。
代码
#include <bits/stdc++.h>
using namespace std;
int a,b,n;
int main() {
cin >> a >> b >> n;
int r = a % b;
for(int i = 1; i <= n+2; i++ ){
if(i >= n){
cout << (r*10) / b;
}
r = r*10 - ((r*10) / b)*b;
}
return 0;
}