分数加减法
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
编写一个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<stdio.h>
#include<math.h>
#include<stdlib.h>
int gys(int a,int b)//递归求最大公约数
{
int c;
if(a<b)
{
c=a;
a=b;
b=c;
}
if(b==0)
{
return a;
}
return gys(b,a%b);
}
int main()
{
int a,c,e,g,x,y,i,m,t,n;char b,d,f;
while(scanf("%d%c%d%c%d%c%d",&a,&b,&c,&d,&e,&f,&g)!=EOF)
{
i=gys(c,g);
i=c*g/i;
x=a*i/c;y=e*i/g;
switch(d)//分情况讨论
{
case'+':{m=x+y;
n=gys(m,i);
if(m%i==0)
{printf("%d\n",m/i);}
else
{printf("%d/%d\n",m/n,i/n);}}
break;
case'-':
{
t=x-y;m=abs(t);
if(m==0)
{
printf("0\n");
}
else
{
n=gys(m,i);
if(m%i==0)
{
printf("%d\n",t/i);
}
else
{
printf("%d/%d\n",t/n,i/n);
}
}
} break;
}
}
return 0;
}