题目描述
读入4个整数a、b、c、d和一个运算符(‘+’、‘-’、‘*’、‘/’中的一个),进行分数a/b和c/d的对应运算,输出最简结果。
输入
有多组测试数据。输入的第一行是整数T(1<=T<=200),表示随后测试数据的组数。每组测试数据占一行,由一个四个正整数a,b,c,d和一个运算符组成,相邻数据间有一个空格
输出
对应每组测试数据,输出分数运算的最简结果,占一行。具体可参照样例。
样例输入 Copy
3 1 2 3 4 - 35 24 24 5 * 25 72 9 5 /
样例输出 Copy
1/2-3/4=-1/4 35/24*24/5=7 25/72/9/5=125/648
#include<stdio.h>
#include<math.h>
int main() {
int n, a, b, c, d, fz, fm, i=0, j=0, p=0, flag = 0, l=1;
char op;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d %d %d %d %c", &a, &b, &c, &d, &op);
getchar();
flag = 1;
switch (op) {
case'-':
fz = a * d - b * c;
fm = b * d;
break;
case'+':
fz = a * d + b * c;
fm = b * d;
break;
case'/':
fz = a * d;
fm = b * c;
break;
case '*':
fz = a * c;
fm = b * d;
break;
}
if (fz % fm == 0)
printf("%d/%d%c%d/%d=%d\n", a, b, op, c, d, fz / fm);
else {
if (fz < 0)
{
flag = 0;
fz = -fz;
}
if (fz > fm)
p = fm;
else
p = fz;
for (j = 2; j <= p; j++)
{
for (l = 2; l <= j; l++)
if (fz % l == 0 && fm % l == 0) {
fz = fz / l;
fm = fm / l;
}
}
if (flag == 1)
printf("%d/%d%c%d/%d=%d/%d\n", a, b, op, c, d, fz, fm);
else
printf("%d/%d%c%d/%d=%d/%d\n", a, b, op, c, d,-fz, fm);
}
}
return 0;
}