两个有理数的和

本题要求编写程序,计算两个有理数的和。


输入格式:


输入在一行中按照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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值