1105 分数加减法

分数加减法

1、题目内容

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

2、题目分析

在这个题目里,主要就是得考虑三个问题,首先就是两个分数的差可能是负数,所以需要分类讨论。另,需要考虑 分数的和差可能为整数的情况。再者,需要对分数进行约分,即需要求最大公约数。

3、参考代码

#include<stdio.h>
#include<math.h>
int divisor(int a,int b) //求最大公约数 
{
	if(b==0) return a;
	else     return divisor(b,a%b);
}
int main()
{
	int k;
	scanf("%d",&k);
	while(k--)
	{
		int a,b,c,d;
		int y,x1,x2,x;
		scanf("%d %d %d %d",&a,&b,&c,&d);
		y=b*d;       //分母 
		x1=a*d-b*c; //和 
		x2=a*d+b*c; //差 
		if(x2%y==0)   //分两类情况,和为整数 与 不为整数
		{
			printf("%d ",x2/y);
		} 
		else
		{
			printf("%d/%d ",x2/(divisor(x2,y)),y/(divisor(x2,y)));
		}
		if(x1==0)            printf("0\n");    //分三类,差为0,差小于0,差大于0
		else if(x1>0)
	    {
               if(x1%y==0) 	 printf("%d\n",x1/y);
               else          printf("%d/%d\n",x1/(divisor(x1,y)),y/(divisor(x1,y)));
	    }
	    else
	    {
	    	   if((-x1)%y==0) printf("-%d\n",(-x1)/y);
	    	   else           printf("-%d/%d\n",(-x1)/(divisor(-x1,y)),y/(divisor(-x1,y)));
	    }
	}
	return 0;
}

那,我一直对你好 好了~

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42987451/article/details/82943879