参考:
历届试题 小数第n位 蓝桥杯、
历届试题-小数第n位[蓝桥杯][思维]`、
总结:
- 按照手算除法的思路写代码,但是提交会超时,通过80%
- 需要多写一个while让小数点逼近第n个数 ,可以避免运行超时 ✔
- 因为a,b,n取值范围很大,所以定义时要用long
- a/b的小数部分=(a%b)/b
代码:
import java.util.Scanner;
import java.math.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin=new Scanner(System.in);
long a,b,n,x,y,z,count,num,flag,rest;
while(cin.hasNext()) {
a=cin.nextLong();
b=cin.nextLong();
n=cin.nextLong();
x=y=z=count=num=flag=rest=0;
while(n-5>0){
a*= 100000;
a%=b;
n-=5;
}
while(a%b!=0) {
if(a<b) {
a*=10;
num=a/b;
rest=a%b;
count++;
if(count==n) {
a=rest;
break;
//跳出循环的可能之一:现在找到第n个位置,接下来跳出这个while循环,去找后两个小数。
}
if(rest==0) {
flag=1;
break;
//跳出循环的可能之二:还没找到我需要的第n个位置的数,但余数为0,可以整除,所以跳出循环,直接输出000
}
}else {
a=a%b;
}
}
if(flag==1) {
System.out.println("000");
}else {
double ans=1.0*a/b;
System.out.println((int)(num*100+ans*100));
}
}
}
}