题目描述
从键盘读入一个分数算式,为2个分数做加法或者减法,请输出分数算式的结果,结果也用分数表达,且约分到最简形式。(请注意:做减法可能得到负的分数,如果是负数要输出负号-,如1/15-4/15结果为-1/5)(5.1.76)
输入格式
分数表达式(分数表达式中,每个分数的分子和分母都是正整数,两个分数中的运算符,可能是加号,也可能是减号,且分数表达式不含空格)
输出格式
分数表达式计算的结果
样例输入
1/12+5/12
样例输出
1/2
提示/说明
注意考虑特殊情况,如:1/2+1/2=1,1/2-1/2=0,这些情况下结果不需要表现为分数形式。
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int gys(int x,int y)
{
int z=y;
while(x%y!=0)
{
z=x%y;
x=y;
y=z;
}
return z;
}
int main()
{
int a,b,c,d,i,s,n,k;
char x,y,z;
while(~scanf("%d%c%d%c%d%c%d",&a,&x,&b,&y,&c,&z,&d))
{
s=b*d;
a=a*d;
c=c*b;
if(y=='+')
{
i=a+c;
}
else
{
i=a-c;
}
k=fabs(i);
if(i==0)printf("0\n");
else
{
n=gys(k,s);
if(s/n==1)printf("%d\n",i/n);
else printf("%d/%d\n",i/n,s/n);
}
}
return 0;
}