蓝桥 历届试题 小数第n位 JAVA

我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。
如果我们把有限小数的末尾加上无限多个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

思路:一定注意后边的三个测试数据很大,所以就要想办法给它优化!!补位的部分用字符串。

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();
		int b = sc.nextInt();
		int n = sc.nextInt();
		String s1 = "";
		a = a % b;
		int i = n + 2;             // i本身1位,for的时候1又是一位,所以+2(提示:看第二个for)
		for (; i > 10; i -= 7) {   // -=7,可以少循环7倍,提高代码效率
			a = a * 10000000 % b;  // *10000000可以优化代码质量
			if (a == 0) {          // 如果整除则直接跳出
				break;
			}
		}
		for (; i > 0; i--) {
			if (i <= 3) {
				s1 = s1 + a * 10 / b; // 最后三位使用字符串保存
			}
			if (a == 0) {          // 如果整除则直接跳出
				break;
			}
			a = a * 10 % b;        // 循环每一位
		}
		while (s1.length() < 3) {
			s1 = s1 + "0";         // 将字符串的长度补到3
		}
		System.out.println(s1);
	}
}

小剧场 :见过的人无非就那点破事 他 她 它 塌 拓

发布了202 篇原创文章 · 获赞 149 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43771695/article/details/105083010