读入4个整数a、b、c、d和一个运算符(‘+’、‘-’、‘*’、‘/’中的一个),进行分数a/b和c/d的对应运算,输出最简结果。
Standard Input
有多组测试数据。输入的第一行是整数T(1<=T<=200),表示随后测试数据的组数。每组测试数据占一行,由四个正整数a,b,c,d和一个运算符组成,相邻数据间有一个空格。
Standard Output
对应每组测试数据,输出分数运算的最简结果,占一行。具体可参照样例。
Samples
Input | Output |
---|---|
3 1 2 3 4 - 35 24 24 5 * 25 72 9 5 / | -1/4 7 125/648 |
Problem ID | 1891 |
Problem Title | 分数运算 |
Time Limit | 1000 ms |
Memory Limit | 64 MiB |
Output Limit | 64 MiB |
Source | wxiaoping - 2018.4.16 |
#include<stdio.h>
int gcd(int x,int y)
{
return !y? x>0?x:-x:gcd(y,x%y);
}
int main()
{
int T;
for(int i = 0;i < T;i++){
int a1,b1,a2,b2;
char c;
while(scanf("%d/%d %d/%d %c",&a1,&b1,&a2,&b2,&c)!=-1)
{
int A,B,C;
switch(c)
{
case '+':
A=a1*b2+a2*b1;
B=b1*b2;
C=gcd(A,B);
printf("%d/%d\n",A/C,B/C);
break;
case '-':
A=a1*b2-a2*b1;
B=b1*b2;
C=gcd(A,B);
printf("%d/%d\n",A/C,B/C);
break;
case '*':
A=a1*a2;
B=b1*b2;
C=gcd(A,B);
printf("%d/%d\n",A/C,B/C);
break;
case '/':
A=a1*b2;
B=a2*b1;
C=gcd(A,B);
B<0?printf("%d/%d\n",-A/C,-B/C):printf("%d/%d\n",A/C,B/C);
break;
default:break;
}
}
}
return 0;
}