分数加减法
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
编写一个C程序,实现两个分数的加减法
Input
输入包含多行数据
每行数据是一个字符串,格式是"a/boc/d"。
其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。
数据以EOF结束
输入数据保证合法
Output
对于输入数据的每一行输出两个分数的运算结果。
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
Example Input
1/8+3/8 1/4-1/2 1/3-1/3
Example Output
1/2 -1/4 0
import java.util.Scanner; class Rational{ int fenzi; int fenmu; Rational(int a,int b){ if(a == 0){ fenzi = 0; fenmu = 1; } else{ setFenziAndFenmu(a,b); } } void setFenziAndFenmu(int a,int b){ int c = f(Math.abs(a),Math.abs(b)); fenzi = a/c; fenmu = b/c; if(fenzi < 0 && fenmu < 0){ fenzi = -fenzi; fenmu = -fenmu; } } int getFenzi(){ return fenzi; } int getFenmu(){ return fenmu; } int f(int a,int b){ if(a < b){ int c = a; a = b; b= c; } int r = a % b; while(r != 0){ a = b; b = r; r = a % b; } return b; } Rational add(Rational r){ int a = r.getFenzi(); int b = r.getFenmu(); int newFenzi = fenzi*b + fenmu * a; int newFenmu = fenmu * b; Rational result = new Rational(newFenzi,newFenmu); return result; } Rational sub(Rational r){ int a = r.getFenzi(); int b = r.getFenmu(); int newFenzi = fenzi*b - fenmu * a; int newFenmu = fenmu * b; Rational result = new Rational(newFenzi,newFenmu); return result; } } public class Main { public static void main(String args[]){ Scanner reader = new Scanner(System.in); String str; while(reader.hasNext()){ str = reader.next(); Rational r1 = new Rational(str.charAt(0)-'0',str.charAt(2)-'0'); Rational r2 = new Rational(str.charAt(4)-'0',str.charAt(6)-'0'); if(str.charAt(3) =='+'){ Rational result = r1.add(r2); int a = result.getFenzi(); int b = result.getFenmu(); if(a == 0) System.out.println("0"); else if(a/b == 1) System.out.println("1"); else if(a/b == -1) System.out.println("-1"); else if(a / b == a) System.out.println(a); else System.out.println(a+"/"+b); } if(str.charAt(3) == '-'){ Rational result = r1.sub(r2); int a = result.getFenzi(); int b = result.getFenmu(); if(a == 0) System.out.println("0"); else if(a/b == 1) System.out.println("1"); else if(a/b == -1) System.out.println("-1"); else if(a / b == a) System.out.println(a); else System.out.println(a+"/"+b); } } } }