一、循环小数的转化
定理:任意整数除以与这个整数位数相同且全由9组成的数,就能得到一个循环小数。
例如:
二、计算
举例1:0.12345345345345...
计算:
举例2:0.123123123...
一般化:0.XXXpXXXXXqpXXXXXqpXXXXXq...
p既为循环体的开始,q代表循环体的结束,num[p:q]代表小数第p位到第q位。
三、实现
import java.util.Scanner;
//0.12 567 567 567 ...
//12/100+0.567 567 .../100=12/100+567/999/100=12/100+567/99900=(12*999+567)/99900
//a[1:p-1]*(10^(q-p+1)-1)+a[p:q] / (10^(q-p+1)-1)*10^(p-1)
public class ExaminationF {
//最大公因数
public static int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
//a^b
public static int pow(int a,int b){
int res = 1;
for (int i = 0; i < b; i++) {
res*=a;
}
return res;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int p = scanner.nextInt();
int q = scanner.nextInt();
int num = scanner.nextInt();
int front = num / pow(10 , (q - (p - 1)));
int end = num % pow(10 , (q - (p - 1)));
//numerator:分子
int numerator = front*(pow(10,q-p+1)-1)+end;
int denominator = (pow(10,q-p+1)-1)*(pow(10,p-1));
int factor = 0;
if ((factor = gcd(numerator,denominator))!=1) {
numerator/=factor;
denominator/=factor;
}
System.out.println(numerator+" "+denominator);
}
}
参考材料