历届试题 小数第n位
时间限制:1.0s 内存限制:256.0MB
提交此题
问题描述
我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。
如果我们把有限小数的末尾加上无限多个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
第一次代码,没有考虑到double的长度,只有二十分
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner ci=new Scanner(System.in);
double n=ci.nextDouble(),m=ci.nextDouble();
int a=ci.nextInt();
double b=n/m;
String str=""+b;
if(b>=10) {
b=b/10;
}
String str2 = str.substring(a+1, a+4);
System.out.println(str2);
}
}
第二次代码我在网上搜索了一下使用了BigDecimal 方法但是这样暴力也只能获取40分
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
private static final int DEF_DIV_SCALE=10000;//末尾显示小数的长度
public static BigDecimal div(double v1,double v2){
BigDecimal b1=BigDecimal.valueOf(v1);//转为字符串
BigDecimal b2=BigDecimal.valueOf(v2);
return b1.divide(b2,DEF_DIV_SCALE,BigDecimal.ROUND_HALF_UP);//b1除b2 末尾保留10000个小数
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
double a = in.nextDouble();
double b = in.nextDouble();
int n = in.nextInt();
String string = div(a, b)+"";//转为String类型
String string2 = "";//定义一个空字符串来接收
for(int x = 0;x<string.length();x++){
if(string.charAt(x)=='.'){//截取第x个判断是否等于.
string2+=string.substring(x+n, n+3+1);//截取 (第n位开始~n的后面三位) 输出
//这里为什么是x+n,n+3+1
//例如:x=1 n=1 那么就是(2,5)截取3位数 从第2位开始到第5位的前一位
}
}
System.out.println(string2);
//String str=""+b;
//String str2 = str.substring(a+1, a+4);
//System.out.println(str2);
}
}
第三次我干脆直接用循环简单,最后一组数太长了循环超时只有80分
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner ci = new Scanner(System.in);
long a=ci.nextLong(),b=ci.nextLong();
long c=ci.nextLong();
a=a%b;
for(long i=0;i<c+2;i++) {
a=a*10;
if(i>=c-1) {
Long d=a/b;
System.out.print(d);
}
a=a%b;
}
}
}
希望大家给我提出改正建议。谢谢!