我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。
如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式。
本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数。
输入格式
一行三个整数:a b n,用空格分开。a是被除数,b是除数,n是所求的小数后位置(0<a,b,n<1000000000)
输出格式
一行3位数字,表示:a除以b,小数后第n位开始的3位数字。
样例输入
1 8 1
样例输出
125
import java.util.Scanner;
public class Main {
public static void main(String[]args) {
Scanner scan=new Scanner(System.in);
int a,b; //进行除法运算的两个数
int n,m,d;
a=scan.nextInt();
b=scan.nextInt();
n=scan.nextInt();
a%= b; //只求小数位的话,a对b取模即可
for(int i = 0 ; i < n-1 ; i++) { //计算掉n之前的小数
a*= 10; //每取一位小数就向前进一位
a%= b;
}
for(int i = 0 ; i < 3 ; i++) {
a*= 10;
System.out.print(a/b); //开始输出所有的n位开始的小数
a%= b;
}
}
}
之前还写过一种特别麻烦的方法,虽然也可以算的出来,但是判题没有过,不知道是哪里出了问题,先放在这里过几天再来看看。
import java.util.Scanner;
public class Main {
public static void main(String[]args) {
Scanner scan=new Scanner(System.in);
double a,b; //进行除法运算的两个数
int n,m,d;
a=scan.nextDouble();
b=scan.nextDouble();
n=scan.nextInt();
// System.out.println(a/b);
d=(int) (a/b);
double c=a/b-d;//c仅为小数部分
m=getNumberDecimalDigits(c); //获得浮点数c的小数位数
int x[]=new int[10000000];
for(int i=0;i<m;i++) {
c*=10;
x[i]=(int) (c%10);
}
if(m<n+3) {//位数不够补零
for(int i=m;i<n+3;i++) {
x[i]=0;
}
}
for(int i=n-1;i<n+2;i++) {
System.out.print(x[i]);
}
}
public static int getNumberDecimalDigits(double number) {//获取小数点后的位数
String moneyStr = String.valueOf(number); //将double转换成字符串
String[] num = moneyStr.split("\\."); //将字符串分为小数点前的部分和小数点后的部分
if (num.length == 2) {
for (;;){
if (num[1].endsWith("0")) { //测试此字符串如果以0结尾,就去掉结尾的 0
num[1] = num[1].substring(0, num[1].length() - 1);
}
else {
break;
}
}
return num[1].length();
}
else {
return 0;
}
}
}