1034 Rational four operations, C

#include <stdio.h>
void hj(long int a, long int b)	//“化简并输出”函数
{
	long int c=0,x=1,flag=0,ma,mb;
	if(a<0 && b<0)	{a=a*(-1);	b=b*(-1);}
	if(a<0 && b>0)	{a=a*(-1);	printf("(-");	flag=1;} //判断要化简分数的正负
	if(a>0 && b<0)	{b=b*(-1);	printf("(-");	flag=1;}
	c = a / b;		//c保存整数部分
	a = a - b*c;

	if( a != 0 )	//分数部分不为0,则进行化简
	{
		ma = a;
		mb = b;
		x = mb % ma;
		while( x!=0 )	//辗转相除,找最大公约数
		{
			mb = ma;
			ma = x;
			x = mb % ma;
		}
		a = a/ma;
		b = b/ma;
	}
	
	if(c>0)		//整数部分不为0
	{
		printf("%ld",c);
		if(a)	//分数部分不为0,则输出;为0则不输出
			printf(" %ld/%ld",a,b);
	}
	if(!c)		//整数部分为0
	{
		if(!a)
			printf("0");	//a也为0,则输出0
		else
			printf("%ld/%ld",a,b);
	}
	if(flag)		//原分数为负数,补齐括号
		printf(")");
	
}

int main()
{
	long int a,b,c,d,x1=0,y1=0,x2=0,y2=0,x3=0,y3=0,x4=0,y4=0;
	scanf("%ld/%ld %ld/%ld",&a,&b,&c,&d);
	
	x1 = a*d+b*c;	y1 = b*d;	//1234分别保存+-*/的四次运算结果
	x2 = a*d-b*c;	y2 = b*d;
	x3 = a*c;		y3 = b*d;
	x4 = a*d;		y4 = b*c;
	
	hj(a,b);
	printf(" + ");
	hj(c,d);
	printf(" = ");
	hj(x1,y1);
	printf("\n");

	hj(a,b);
	printf(" - ");
	hj(c,d);
	printf(" = ");
	hj(x2,y2);
	printf("\n");

	hj(a,b);
	printf(" * ");
	hj(c,d);
	printf(" = ");
	hj(x3,y3);
	printf("\n");

	hj(a,b);
	printf(" / ");
	hj(c,d);
	printf(" = ");
	if(!y4)	printf("Inf");	//被除数为0
	else	hj(x4,y4);
	
	return 0;
}
Published 44 original articles · won praise 0 · Views 873

Guess you like

Origin blog.csdn.net/weixin_43916400/article/details/104518070