PAT 1088

#include<cstdio>
#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
#include<queue>
#include<map>
#include<set>
#include<cmath>
using namespace std;

struct fs
{
	long long u,d;
	long long z;
};

long long gcd(long long a,long long b)
{
	if(b==0) return a;
	else return gcd(b,a%b);
}
fs huajian(fs a)
{
	if(a.d<0)
	{
		a.d=-a.d;
		a.u=-a.u;
	}
	if(a.u!=0)
	{
		long long d=abs(gcd(a.u,a.d));
		a.u/=d;
		a.d/=d;
	}
	return a;
}
fs add(fs a,fs b)
{
	fs result;
	result.u=a.u*b.d+b.u*a.d;
	result.d=a.d*b.d;
	return huajian(result);
}

fs jian(fs a,fs b)
{
	fs result;
	result.u=a.u*b.d-b.u*a.d;
	result.d=a.d*b.d;
	return huajian(result);
}
fs cheng(fs a,fs b)
{
	fs result;
	result.u=a.u*b.u;
	result.d=a.d*b.d;
	return huajian(result);
}
fs chu(fs a,fs b)
{
	fs result;
	result.u=a.u*b.d;
	result.d=a.d*b.u;
	return huajian(result);
}

void op(fs a)
{
	if(a.u/a.d!=0)
	{
		a.z=a.u/a.d;
		a.u=abs(a.u)%abs(a.d);
		a.d=abs(a.d);
		if(a.u==0)
		{
			if(a.z<0)
				printf("(%lld)",a.z);
			else 
				printf("%lld",a.z);
		}
		else 
			if(a.z<0)
				printf("(%lld %lld/%lld)",a.z,a.u,a.d);
			else 
				printf("%lld %lld/%lld",a.z,a.u,a.d);

	}
	else
	{
		if(a.u==0)
			printf("0");
		else if(a.u>0)
			printf("%lld/%lld",a.u,a.d);
		else 
			printf("(%lld/%lld)",a.u,a.d);
	}
}
int main()
{

	//freopen("input.txt","r",stdin);
	fs a,b;
	a.z=0;b.z=0;
	scanf("%lld/%lld %lld/%lld",&a.u,&a.d,&b.u,&b.d);
	fs ans[4];
	ans[0]=add(a,b);
	op(huajian(a));printf(" + ");op(huajian(b));printf(" = ");op(ans[0]);
	printf("\n");
	ans[1]=jian(a,b);
	op(huajian(a));printf(" - ");op(huajian(b));printf(" = ");op(ans[1]);
	printf("\n");

	ans[2]=cheng(a,b);
	op(huajian(a));printf(" * ");op(huajian(b));printf(" = ");op(ans[2]);
	printf("\n");

	ans[3]=chu(a,b);
	op(huajian(a));printf(" / ");op(huajian(b));printf(" = ");
	if(b.u!=0) op(ans[3]);
	else printf("Inf");
	printf("\n");
	
	//freopen("con","r",stdin);

	system("pause");
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值