埃及分数
注意用到:double型扩大倍数才能和0直等于比较
法一:通过比较确定每次减去所能减掉的最大分数
代码:
import java.util.Scanner;
public class eighty {
public static void main(String[] args) {
Scanner reader=new Scanner(System.in);
String s=reader.next();
String p[]=s.split("/");
int n1=Integer.parseInt(p[0]);
int n2=Integer.parseInt(p[1]);
double n=(double)n1/(double)n2;
double m=n;
double k=2;
System.out.printf(n1+"/"+n2+"=");
while(m>0) {
if(1/k<=m) {
m-=(1/k);
if((int)(1000000000*m)==0) {//double型扩大倍数才能和0直等于比较
System.out.printf("1/%d",(int)k);
}
else {
System.out.printf("1/%d+",(int)k);
}
}
k++;
}
}
}
运行结果:
法二:通过数学推导推出每次能减去的最大分数
代码:
import java.util.Scanner;
public class onehundred {
public static void main(String[] args) {
Scanner reader=new Scanner(System.in);
String s=reader.next();
String p[]=s.split("/");
int n1=Integer.parseInt(p[0]);
int n2=Integer.parseInt(p[1]);
double n=(double)n1/(double)n2;
System.out.printf(n1+"/"+n2+"=");
if(n1==1||n2%n1==0) {
System.out.printf("1/"+n2/n1);
}
else {
int C=n2/n1+1;
if(n>1/C) {
System.out.printf("1/%d",C);
n=n-1/C;
n1=n1*C-n2;
n2=n2*C;
C=n2/n1+1;
}
while(n2%n1!=0) {
System.out.printf("+1/%d",C);
n=n-1/C;
n1=n1*C-n2;
n2=n2*C;
C=n2/n1+1;
}
System.out.printf("+1/%d",n2/n1);
}
}
}
运行结果: