您的位置:首页 > 其它

poj 3979 分数加减法

2016-08-22 19:47 218 查看
分数加减法

TimeLimit:1000MSMemoryLimit:65536K
TotalSubmissions:13666Accepted:4594
Description

编写一个C程序,实现两个分数的加减法
Input

输入包含多行数据
每行数据是一个字符串,格式是"a/boc/d"。

其中a,b,c,d是一个0-9的整数。o是运算符"+"或者"-"。

数据以EOF结束
输入数据保证合法
Output

对于输入数据的每一行输出两个分数的运算结果。
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
SampleInput

1/8+3/8
1/4-1/2
1/3-1/3

SampleOutput

1/2
-1/4
0

分析:先通分再约分,即求出两个分母的最小公倍数,求分子分母的最大公约数来约分,
最终结果可能是0,那么直接输出0;
可能是整数
可能是正数,也可能是负数;


#include<stdio.h>
#include<math.h>

intgcd(intx,inty){//辗转相除法求最大公约数,x>=y;
if(x<y){
inttmp=x;
x=y;
y=tmp;
}
if(y==0)
returnx;
returngcd(y,x%y);
}

intmain(){
inta,b,c,d,_gcd,_lcm,numerator,_a,_c,_gcd1;
charo;
while(scanf("%d/%d%c%d/%d",&a,&b,&o,&c,&d)!=EOF){
_gcd=gcd(b,d);
_lcm=b/_gcd*d;//两个分母的最小公倍数
_a=a*d/_gcd;//通分后第一个分式的分子
_c=c*b/_gcd;//通分后第二个分式的分子
//计算和式的分子值
if(o=='+')
numerator=_a+_c;
else
numerator=_a-_c;
//如果分子值为0,则直接输出
if(numerator==0)
printf("%d\n",numerator);
else{
_gcd1=gcd(abs(numerator),_lcm);
//最大公约数和分母相同,说明分子和分母相同,最后的值为整数
if(_gcd1==_lcm)
printf("%d\n",numerator/_gcd1);
else
printf("%d/%d\n",numerator/_gcd1,_lcm/_gcd1);
}
}
return0;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: