分数加减法
2017-08-01 17:50
260 查看
描述
编写一个C程序,实现两个分数的加减法
输入输入包含多行数据
每行数据是一个字符串,格式是"a/boc/d"。
其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。
数据以EOF结束
输入数据保证合法
输出对于输入数据的每一行输出两个分数的运算结果。
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
样例输入
样例输出
编写一个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/40
import java.util.*; public class Main { static int gcd(int m,int n){ if(m%n==0) return n; else return gcd(n,m%n); } public static void main(String[] args) { Scanner in=new Scanner(System.in); while(in.hasNext()){ String s=in.next(); int a=s.charAt(2)-'0'; int b=s.charAt(6)-'0'; int mol=0,den=0; den= a*b/gcd(a,b); if(s.charAt(3)=='+') mol=(s.charAt(0)-'0')*(den/(s.charAt(2)-'0'))+(s.charAt(4)-'0')*(den/(s.charAt(6)-'0')); else mol=(s.charAt(0)-'0')*(den/(s.charAt(2)-'0'))-(s.charAt(4)-'0')*(den/(s.charAt(6)-'0')); if(mol==0) System.out.println(0); else if(mol==den){ System.out.println(1); } else if(den==1) System.out.println(mol); else{ int x=den,y=Math.abs(mol);//保护分子分母的值,一开始直接den/=gcd(mol,den),改变了分母分子的值,还卡住了,我真是笨死了 if(gcd(x,y)!=1){ den/=gcd(x,y); mol/=gcd(x,y); } if(den==1) System.out.println(mol); else System.out.println(mol+"/"+den); } } } }反思:此题第一次提交竟然WA了,我就能知道是我某些值(情况)没有考虑到,后来才发现原来分母为一的情况没有考虑到(QAQ),加上之后果然AC了,还要注意的是,调用gcd时,分子不能为负。其他就没有啦,我写的麻烦一点啦,但是也是抠了一段时间,继续加油!