分数四则运算
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
编写程序,实现两个分数的加减法
Input
输入包含多行数据;
每行数据是一个字符串,格式是"a/boc/d",其中a, b, c, d为数字(每个数字保证为正数并且不存在正号)。o是运算符"+"或者"-","*","\"。
数据以EOF结束,输入数据保证合法。
Output
直接输出结果,并且注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数形式。
Example Input
1/100+3/100 1/4-1/2 1/3-1/3 1/2*2/1 1/2\1/2
Example Output
1/25 -1/4 0 1 1
import java.util.*; public class Main { public static void main(String[] args) { Scanner reader = new Scanner(System.in); while(reader.hasNext()){ char str[]=reader.nextLine().toCharArray(); int a[]=new int[4]; char t = 0; for(int i=0;i<str.length;i++){ if(str[i]=='*'||str[i]=='+'||str[i]=='-'||str[i]=='\\') { t=str[i]; str[i]='/'; } } //for(int i=0;i<str.length;i++){ // System.out.println(str[i]); // } String s=String.valueOf(str); String s1[]=new String[4]; s1=s.split("/"); for(int i=0;i<4;i++){ a[i]=Integer.valueOf(s1[i]).intValue(); //System.out.println(s1[i]); } //for(int i=0;i<4;i++){ // System.out.println(a[i]); // } Rational r1=new Rational(a[0], a[1]); Rational r2=new Rational(a[2], a[3]); if(t=='+'){ Rational resultRational=r1.add(r2); int x=resultRational.getNum(); int y=resultRational.getDen(); if(x%y==0){ System.out.println(x/y); }else{ System.out.println(x+"/"+y); } } else if(t=='-'){ Rational resultRational=r1.sub(r2); int x=resultRational.getNum(); int y=resultRational.getDen(); if(x%y==0){ System.out.println(x/y); }else{ System.out.println(x+"/"+y); } } else if(t=='\\'){ Rational resultRational=r1.div(r2); int x=resultRational.getNum(); int y=resultRational.getDen(); if(x%y==0){ System.out.println(x/y); }else{ System.out.println(x+"/"+y); } } else if(t=='*'){ Rational resultRational=r1.muti(r2); int x=resultRational.getNum(); int y=resultRational.getDen(); if(x%y==0){ System.out.println(x/y); }else{ System.out.println(x+"/"+y); } } } } } class Rational{ int num; int den; Rational(int a,int b){ if(a==0) { num=0;den=1; } else{ setNumandDen(a,b); } } void setNumandDen(int a,int b){ int c=f(Math.abs(a),Math.abs(b)); num=a/c; den=b/c; if(num<0&&den<0){ num=-num; den=-den; } } int getNum(){ return num; } int getDen(){ return den; } 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.getNum(); int b=r.getDen(); int newnum=num*b+den*a; int newden=den*b; Rational resultRational=new Rational(newnum,newden); return resultRational; } Rational sub(Rational r){ int a=r.getNum(); int b=r.getDen(); int newnum=num*b-den*a; int newden=den*b; Rational resultRational=new Rational(newnum,newden); return resultRational; } Rational muti(Rational r){ int a=r.getNum(); int b=r.getDen(); int newnum=num*a; int newden=den*b; Rational resultRational=new Rational(newnum,newden); return resultRational; } Rational div(Rational r){ int a=r.getNum(); int b=r.getDen(); int newnum=num*b; int newden=den*a; Rational resultRational=new Rational(newnum,newden); return resultRational; } }