介绍:
给四个整数,从第一个开始,每两个数为一个分数,前面的为分子后面的为分母,求两个分数的和与差,如果结果为整数就输出整数,如果不是整数,那就输出最简分数
思考:
1.就用解数学题的方式来做,将两个分数的分母化成相同的数,然后计算分子
2.算出结果之后,要求最简的分数,直接同时除以分子和分母的最大公约数就行了。
package 初级;
import java.util.Scanner;
/*
* 介绍:
* 依次给四个整数,每两个为一个分数。求他们的和和差
*/
public class 分数的加减 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int a = input.nextInt();
int b = input.nextInt();
int c = input.nextInt();
int d = input.nextInt();
add(a,b,c,d);
subtract(a,b,c,d);
}
private static void subtract(int a, int b, int c, int d) {
if((a*d-b*c)%(b*d) == 0){//当能够整除的话
int result = (a*d-b*c)/(b*d);
System.out.println(a+"/"+b+"-"+c+"/"+d+" = "+result);
}else{
int fenzi = (a*d-b*c);
int fenmu = (b*d);
int max = getMax(fenzi,fenmu);
fenzi = fenzi / max;
fenmu = fenmu / max;
System.out.println(a+"/"+b+"-"+c+"/"+d+" = "+ fenzi +"/"+ fenmu);
}
}
private static void add(int a, int b, int c, int d) {
if((a*d+b*c)%(b*d) == 0){//当能够整除的话
int result = (a*d+b*c)/(b*d);
System.out.println(a+"/"+b+"+"+c+"/"+d+" = "+result);
}else{//不能整除,则显示为分数,并且要化到最简
int fenzi = (a*d+b*c);
int fenmu = (b*d);
int max = getMax(fenzi,fenmu);//求两个数的最大公约数,就可以直接得到最简式
fenzi = fenzi / max;
fenmu = fenmu / max;
System.out.println(a+"/"+b+"+"+c+"/"+d+" = "+ fenzi +"/"+ fenmu);
}
}
//得到最大公约数
private static int getMax(int x, int y) {
int temp,a,b;
if(x<y){//当x<y时,将x、y换位置。使x>y,因为求最大公约数是取余,前面的数要比后面的大
temp = y;
y = x;
x = temp;
}
a = x;
b = y;
while(b!=0){
//第一次判断的时候,如果b==0,那么说明最大公约数就是0;
//第一次过后,b就代表的是余数了,余数如果不为0,说明还没有整除,需要一直循环,直到能够整除。
//当b==0时,上一个b的值赋值给了a。所以最大公约数现在是a。
temp = a%b;
a = b;
b = temp;
}
return a;
}
}