题目描述
编写一个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
#include
#include
int func(int m,int n) //求最大公约数
{
int tmp;
m=abs(m);
n=abs(n);
if(m==n)
return m;
if(m
{
tmp=m;
m=n;
n=tmp;
}
while(m%n!=0)
{
tmp=m;
m=n;
n=tmp%n;
}
return n;
}
int main()
{
int a,b,c,d; //两个分数的分子和分母
int he,mu,zi; //分母和分子
char o;
while(scanf("%d/%d%c%d/%d",&a,&b,&o,&c,&d)!=EOF)
{
he=func(b,d); //求最大公约数
mu=b*d/he;
if(o=='+')
zi=a*(mu/b)+c*(mu/d);
else
zi=a*(mu/b)-c*(mu/d);
if(zi!=0)
{
if(zi/mu==1)
{
printf("1\n");
}
else
{
if(zi%mu==0)
{
printf("%d\n",zi/mu);
}
else
{
he=func(zi,mu);
zi=zi/he;
mu=mu/he;
printf("%d/%d\n",zi,mu);
}
}
}
else
printf("0\n");
}
return 0;
}