得到循環節長度leng,n%length,若結果加上3小魚循環節長度,則直接截取,否則將循環節複製一次,然後截取後三位
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class _小數第n位 {
static DecimalFormat df=new DecimalFormat("0.0000000000");
public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
int a = sca.nextInt();
int b = sca.nextInt();
int n = sca.nextInt();
sca.close();
loop(a, b, n);
}
private static void loop(int a, int b, int n) {
List list = new ArrayList();
String s1 = (double)a / b +"";
String s2 = "";
long yu = a % b;
int k = -1;
while(true) {
if(yu == 0) {
k = -1;break;
}
if( (k = list.indexOf(yu)) >= 0 ) {
break;
}
list.add(yu);
yu *= 10;
s2 += yu / b;
yu = yu % b;
}
if(k < 0) {//無循環節
String stem = df.format(Double.valueOf(s1));
System.out.println(stem.substring(n+1, n+4));
}else {
int len = s2.substring(k).length();//循環節長度
int res = (n- k) % len ;
String str = s2.substring(k) + s2.substring(k);
if(res == 0)//要截取的起始位置恰好是循環節末尾
System.out.println(str.substring(len-1,len+2));
else
System.out.println(str.substring(res-1,res+2));
}
}
}
測評數據和結果:
129 97 5 969
129 97 112 845
123 13 1000001 384
111 71 12345678 225
22 194 92345678 701