题目描述:题目链接
分数加减法
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
编写一个C程序,实现两个分数的加减法
-
输入
-
输入包含多行数据
每行数据是一个字符串,格式是"a/boc/d"。
其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。
数据以EOF结束
输入数据保证合法
输出
-
对于输入数据的每一行输出两个分数的运算结果。
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
样例输入
-
1/8+3/8 1/4-1/2 1/3-1/3
样例输出
-
1/2 -1/4 0
-
输入包含多行数据
代码求解:
package 语言入门;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
private static BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
private static int divisor(int m, int n){
int c;
while(n > 0){
c = n;
n = m % n;
m = c;
}
return m;
}
public static void main(String args[]) throws Exception
{
String line = stdin.readLine();
while(line != null && !line.isEmpty()){
int b1 = line.charAt(0) - '0';
int a1 = line.charAt(2) - '0';
char o = line.charAt(3);
int b2 = line.charAt(4) - '0';
int a2 = line.charAt(6) - '0';
int a = a1 * a2;
if (o == '+'){
b1 = b1*a2 + b2*a1;
}else{
b1 = b1*a2 - b2*a1;
}
if (b1 == 0){
System.out.println("0");
}else{
boolean nag = false;
if (b1 < 0){
b1 = -b1;
nag = true;
}
int d = divisor(a, b1);
a /= d;
b1 /= d;
if (nag){
b1 = -b1;
}
if (a == 1){
System.out.println(b1);
}else{
System.out.println(b1 + "/" + a);
}
}
line = stdin.readLine();
}
}
}