分数四则运算
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
编写程序,实现两个分数的加减法
Input
输入包含多行数据;
每行数据是一个字符串,格式是"a/boc/d",其中a, b, c, d为数字(每个数字保证为正数并且不存在正号)。o是运算符"+"或者"-","*","\"。
数据以EOF结束,输入数据保证合法。
Output
直接输出结果,并且注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数形式。
Sample Input
1/100+3/100
1/4-1/2
1/3-1/3
1/2*2/1
1/2\1/2
Sample Output
1/25
-1/4
0
1
1
Hint
Source
学到的主要内容:
1.字符串的分割方法:
分割完用字符串租 存下来 String[] s = s.spilt()
多个分割符的时候 要用单个 | 字符隔开 部分特殊字符 要用 \\ 进行转义
2.将字符串转成整型
调用方法 int num = Integer.parseInt(String)
import java.util.Scanner;
/*
一个简陋的分数计算器
主要目的练习面向对象
*/
public class SDUT3849 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String s = in.nextLine();
// 对计算表达式进行分割 成两个 分数
String[] s1 = s.split("\\+|\\-|\\*|\\\\");
// 对分数的分子分母进行分割
String[] left = s1[0].split("\\/");
int a = Integer.parseInt(left[0]);
int b = Integer.parseInt(left[1]);
String[] right = s1[1].split("\\/");
int c = Integer.parseInt(right[0]);
int d = Integer.parseInt(right[1]);
make test = new make(a, b, c, d);
test.Operation(s); // 找出计算的方式(+-*/)
}
in.close();
}
}
class make {
int a, b, c, d;
public make(int a, int b, int c, int d) { // 构造方法
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}
public void print(int m, int n) { // 约分 并 打印计算结果
if (m == 0)
System.out.println(0);
else {
// 辗转相除法 求最大公约数
int a = Math.abs(m);
int b = Math.abs(n);
if (a < b) {
int t = a;
a = b;
b = t;
}
while (a % b != 0) {
int t = a % b;
a = b;
b = t;
}
m /= b;
n /= b;
if (n == 1)
System.out.println(m);
else
System.out.println(m + "/" + n);
}
}
public void sum() { // 求和
int m = a * d + b * c;
int n = b * d;
print(m, n);
}
public void cha() { // 求差
int m = a * d - b * c;
int n = b * d;
print(m, n);
}
public void ji() { // 求积
int m = a * c;
int n = b * d;
print(m, n);
}
public void shang() { // 求商
int m = a * d;
int n = b * c;
print(m, n);
}
// 寻找计算因子
public void Operation(String s) {
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '+') {
sum();
break;
} else if (s.charAt(i) == '-') {
cha();
break;
} else if (s.charAt(i) == '*') {
ji();
break;
} else if (s.charAt(i) == '\\') {
shang();
break;
}
}
}
}
/***************************************************
User name: jk180602张国辉
Result: Accepted
Take time: 148ms
Take Memory: 12536KB
Submit time: 2019-01-11 16:31:34
****************************************************/