昨天在问答里看到一个关于分数计算的算法问题,求分数的加减运算,并需要求的最简分式(无公约数,分数形式,不能出现小数等形式)。
程序中用到一个 辗转相除法 (循环相除) ,以下代码仅供参考。
import java.util.Scanner;
public class GetFenShu {
public static void main(String[] args) {
Scanner input =new Scanner(System.in);
System.out.println("请输入第一个分数:");
String a=input.next();
System.out.println("请输入第二个分数:");
String b =input.next();
System.out.println("请输入操作符(+/-):");
String caozuo=input.next();
System.out.println(getFenShu(a,b,caozuo));
}
private static String getFenShu(String fenshu_1,String fenshu_2,String caozuo){
String[] fenshu_a = fenshu_1.split("/");
String[] fenshu_b = fenshu_2.split("/");
int fenzi_a = Integer.valueOf(fenshu_a[]);
int fenmu_a = Integer.valueOf(fenshu_a[]);
int fenzi_b = Integer.valueOf(fenshu_b[]);
int fenmu_b = Integer.valueOf(fenshu_b[]);
//求和或差
int new_fenzi_a = fenzi_a*fenmu_b;
int new_fenzi_b = fenzi_b*fenmu_a;
int new_fenmu = fenmu_a*fenmu_b;
int new_fenzi =;
if(caozuo == "+"){
new_fenzi = new_fenzi_a+new_fenzi_b;
} else if(caozuo == "-"){
new_fenzi = new_fenzi_a-new_fenzi_b;
}else{
System.out.println("输入错误!");
return null;
}
int gcd = gcd(new_fenmu,new_fenzi);//求最大公约数
return new String(new_fenzi/gcd+"/"+new_fenmu/gcd);
}
//X 分母 Y 分子
public static int gcd(int x, int y){ // 这个是运用辗转相除法求 两个数的 最大公约数 看不懂可以百度 // 下
if(y == )
return x;
else
return gcd(y,x%y);
}
}
计算方式当然不止一种,如果你有更多更好的方法,或本文章有何处错误,欢迎告知,多谢。
代码合集:https://github.com/FanceTsui/Project
——Fance Tsui