Description | ||
给你两个分数,请计算两者和及差。 输入 第一行是一个整数K,表示样例的个数。以后每行一个样例,每行4个正整数,a、b、c、d,即计算分数a/b与c/d的和、差。4个整数都不超过10,000。 输出 每行输出一个样例的结果,先输出和,后输出差。如果结果的值为整数,那么只需要输出整数,如果结果的值为分数,需要输出x/y的形式,并保证x,y互质。 | ||
Sample Input | ||
3 1 2 1 2 2 3 1 3 1 8 5 8 | ||
Sample Output | ||
1 0 1 1/3 3/4 -1/2 | ||
Source |
#include<stdio.h>
int gcd(int a,int b){
int t;
while(a%b!=0){
t=a%b;
a=b;
b=t;
}
return b;
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
int ad,bc,bd;
ad=a*d;
bc=b*c;
bd=b*d;
int jzi,zi;
jzi=ad+bc;
if(ad>bc){
zi=ad-bc;
}else{
zi=bc-ad;
}
int j,m;
m=bd;
j=gcd(jzi,bd);
m=m/j;
jzi=jzi/j;
j=gcd(zi,bd);
bd=bd/j;
zi=zi/j;
if(m==jzi){
if(zi==0){
printf("1 0\n");
}else if(bd==zi){
if(ad>bc){
printf("1 1\n");
}else{
printf("1 -1\n");
}
}else{
if(bd==1){
if(ad>bc){
printf("1 %d\n",zi);
}else{
printf("1 -%d\n",zi);
}
}else{
if(ad>bc){
printf("1 %d/%d\n",zi,bd);
}else{
printf("1 -%d/%d\n",zi,bd);
}
}
}
}else{
if(zi==0){
if(m==1){
printf("%d 0\n",jzi);
}else{
printf("%d/%d 0\n",jzi,m);
}
}else if(bd==zi){
if(m==1){
if(ad>bc){
printf("%d 1\n",jzi);
}else{
printf("%d -1\n",jzi);
}
}else if(ad>bc){
printf("%d/%d 1\n",jzi,m);
}else{
printf("%d/%d -1\n",jzi,m);
}
}else{
if(m==1){
if(bd==1){
if(ad>bc){
printf("%d %d\n",jzi,zi);
}else{
printf("%d -%d\n",jzi,zi);
}
} else{
if(ad>bc){
printf("%d %d/%d\n",jzi,zi,bd);
}else{
printf("%d -%d/%d\n",jzi,zi,bd);
}
}
}else{
if(bd==1){
if(ad>bc){
printf("%d/%d %d\n",jzi,m,zi);
}else{
printf("%d/%d -%d\n",jzi,m,zi);
}
}else{
if(ad>bc){
printf("%d/%d %d/%d\n",jzi,m,zi,bd);
}else{
printf("%d/%d -%d/%d\n",jzi,m,zi,bd);
}
}
}
}
}
}
return 0;
}