您的位置:首页 > 其它

分数加减法

2017-08-01 17:50 260 查看
描述
编写一个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/4
0

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时,分子不能为负。其他就没有啦,我写的麻烦一点啦,但是也是抠了一段时间,继续加油!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: