1081. Rational Sum (20)

#include <iostream>

using namespace std;

long long getsame(long long a, long long b)
{
	if(b != 0)
	{
		return getsame(b, a % b);
	}
	else
	{
		return a;
	}
}

void simplify(long long &a, long long &b)
{
	if(a == 0)
	{
		b = 1;
		return;
	}

	int aflag = 1, bflag = 1;
	if(aflag < 0)
	{
		aflag = -1;
		a = -a;
	}
	if(bflag < 0)
	{
		bflag = -1;
		b = -b;
	}

	long long same = getsame(a, b);
	a /= same;
	b /= same;

	a *= aflag * bflag;
}

void print(long long a, long long b)
{
	if(a == 0)
	{
		printf("0");
		return;
	}

	long long x = a / b;
	if(x != 0)
	{
		printf("%lld", x);

		if(a % b == 0)
		{
			return;
		}
		
		printf(" ");

		if(x < 0)
		{
			x = -x;
		}

		if(a < 0)
		{
			a = -a;
		}
		if(b < 0)
		{
			b = -b;
		}
	}

	a -= x * b;
	printf("%lld/%lld", a, b);
}

int main()
{
	int n;
	scanf("%d", &n);

	long long a = 0, b = 1, c, d;
	int i;
	
	for(i = 1; i <= n; i++)
	{
		scanf("%lld/%lld", &c, &d);

		simplify(c, d);
		a = a * d + b * c;
		b = b * d;

		simplify(a, b);
	}

	print(a, b);
	printf("\n");

	system("pause");
	return 0;
}

 

posted on 2025-11-23 17:18  王景迁  阅读(0)  评论(0)    收藏  举报

导航