分数加减法
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 0import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while( in.hasNext() ){ String str = in.next(); char[]s = str.toCharArray(); int fk = 0; int fh = 0; int i; for( i=0; i<str.length(); i++ ){ if( s[i]=='+' ){ fk = i; fh = 1; break; } else if( s[i]=='-' ){ fk = i; fh = 2; break; } } String s1 = str.substring(0, fk); String s2 = str.substring(fk+1, str.length()); String []p = s1.split("\\/"); String []q = s2.split("\\/"); int a = Integer.parseInt(p[0]); int b = Integer.parseInt(p[1]); int c = Integer.parseInt(q[0]); int d = Integer.parseInt(q[1]); Fs fs1 = new Fs(a, b); Fs fs2 = new Fs(c, d); Fs result = new Fs(); if( fh==1 ) result = fs1.add(fs2); if( fh==2 ) result = fs1.sub(fs2); if( (result.fz%result.fm) == 0 ) System.out.println(result.fz/result.fm); else System.out.println(result.fz+"/"+result.fm); } in.close(); } } class Fs { int fz; int fm; public Fs( int fz, int fm ){ this.fz = fz; this.fm = fm; } public Fs(){} public Fs add( Fs fs ){ int newFz = fz*fs.fm + fm*fs.fz; int newFm = fm*fs.fm; int gys = gys(newFz,newFm); return new Fs(newFz/gys, newFm/gys); } public Fs sub( Fs fs ){ int newFz = fz*fs.fm - fm*fs.fz; int newFm = fm*fs.fm; int gys = gys(newFz,newFm); return new Fs(newFz/gys, newFm/gys); } public int gys( int a, int b ){ int m = Math.max(Math.abs(a), Math.abs(b)); int n = Math.min(Math.abs(a), Math.abs(b)); int r; while( n!=0 ){ r = m%n; m = n; n = r; } return m; } }