问题描述
我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。
如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式。
本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数。
输入格式
一行三个整数:a b n,用空格分开。a是被除数,b是除数,n是所求的小数后位置(0<a,b,n<1000000000)
输出格式
一行3位数字,表示:a除以b,小数后第n位开始的3位数字。
样例输入
1 8 1
样例输出
125
样例输入
1 8 3
样例输出
500
样例输入
282866 999000 6
样例输出
914
解题思路:
1、这道题的n范围在10的九次幂以内,用double的除法无法精确到那么多位
2、自己写一个除法:
例如1 8 3
(1) 先做除法后取余1 / 8 = 0、1 % 8 = 1.这个时候我们得到的应该是整数部分的0以及余数1。
(2) 接着根据除法我们将余数乘以10,再次进行运算10 / 8 = 1、10 % 8 = 2,这个时候我们得到的应该是小数部分的1以及余数2。
(3) 继续往下做,将余数乘以10,再次进行运算20 / 8 = 2、20 % 8 = 4,这个时候我们得到的应该是小数部分的2以及余数4。
......
(4) 每次整除后的数字序列为012500000-->得出答案
每次取余后的数字序列是124000000
参考代码:
import java.io.*; /** * * @ProjectName: 2020-10-07JavaB * @Package: test * @ClassName: Main7 * @Author: 民 * @Description: 蓝桥试题 历届试题 小数第n位 * @Date: 2020年10月11日下午1:54:46 * @Version: 1.0 */ public class Main { public static void main(String[] args) throws IOException{ // TODO Auto-generated method stub BufferedReader br= new BufferedReader(new InputStreamReader(System.in)); String[] values = br.readLine().split(" "); int n = Integer.parseInt(values[0]) ;//282866 int m = Integer.parseInt(values[1]) ;//999000 int t = Integer.parseInt(values[2]);//6 for(int i=0;i<=t+2;i++) { int a = n / m; int b = n % m; n = b*10; if(i>=t) { System.out.print(a); } } } }