两个有理数的和

来源:互联网 发布:无线网址域名注册 编辑:程序博客网 时间:2024/05/01 07:27
本题要求编写程序,计算两个有理数的和。


输入格式:


输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。


输出格式:


在一行中按照a/b的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。




输入样例1:


1/3 1/6


输出样例1:


1/2


输入样例2:


4/3 2/3


输出样例2:


2


import java.util.Scanner;


public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.next();
String str1 = in.next();
int count = 0; // 表示找到str的/在什么位置
int count1 = 0;
/**
* 找分子分母,因为分子分母都有可能是多位数
*/
for (int i = 0; i < str.length(); i++) {
if (str.substring(i, i + 1).equals("/"))
count = i;
}
String s = str.substring(0, count); // 表示分子
String s1 = str.substring(count + 1, str.length()); // 表示分母
for (int i = 0; i < str1.length(); i++) {
if (str1.substring(i, i + 1).equals("/"))
count1 = i;
}
String st = str1.substring(0, count1); // 表示分子
String st1 = str1.substring(count1 + 1, str1.length()); // 表示分母
int num = 0;
/**
* 如果两个分母相等,就直接把分子相加,如果不相等,找最小公倍数,然后小的那个分子分母同时乘 公约数/小的那个
*/
if (s1.equals(st1)) { // 分母相等
int z = Integer.parseInt(s);
int z1 = Integer.parseInt(st);
int fenzi = z + z1;
int fenmu = Integer.parseInt(s1);
if (fenzi % fenmu == 0) {
System.out.println(fenzi / fenmu);
} else {
System.out.println(fenzi + "/" + fenmu);
}
} else { // 分母不相等
int f = Integer.parseInt(s1);
int f1 = Integer.parseInt(st1);
int ff = f;
int ff1 = f1;
while (true) {
if (f <= f1) {
f += ff; // 这里的f已经变了,所以要下面重新定义
} else
f1 += ff1;
if (f == f1) {
num = f1; // num是不相等分母的最小公倍数
break;
}
}
/**
* 这一步开始试小的那个分子分母同乘最小公倍数/小的那个数
*/
int f2 = Integer.parseInt(s1);
int f3 = Integer.parseInt(st1);
int zz = Integer.parseInt(s);
int zz1 = Integer.parseInt(st);
int fff = num / f2; // 表示最小公倍数/f
int zzz = zz * fff;
int fff1 = num / f3;
int zzz1 = zz1 * fff1;
if (((zzz + zzz1) % num == 0)) {
System.out.println((zzz + zzz1) / num);
} else {
/**
* 这一步是将分子分母约分了
*/
for (int i = num; i >= 1; i--) {
if ((zzz + zzz1) % i == 0 && num % i == 0) {
System.out.println((zzz + zzz1) / i + "/" + num / i);
break;
}
}
}
}
in.close();
}
}

0 0