PAT乙题 1034. 有理数四则运算(20)

2018/01/27 PAT 共 1880 字,约 6 分钟

费劲

#include <iostream>
#include <algorithm>
#include<math.h>
#include<string>
#include<vector>
#include<ctype.h>
#include<set>
using namespace std;
void trunc(long long a, long long b) {
	if (a%b == 0) {
		if (a <0) {
			printf("(%lld)", a / b);
		}
		else {
			printf("%lld", a / b);
		}
	}
	else {
		//cout << a << " " << b << endl;
		if (abs(a) > abs(b)) {
			//cout << a / b << " " << a % b << b << endl;
			if (a < 0) {
				printf("(%lld %lld/%lld)", (a / b), (abs(a) % b), b);
			}
			else {
				printf("%lld %lld/%lld", (a / b), (a%b), b);

			}
		}
		else {
			if (a < 0) {
				printf("(%lld/%lld)", a, b);
			}
			else {
				printf("%lld/%lld", a, b);
			}
		}
	}
}
long long gcd(long long a, long long b) {
	return b == 0 ? a : gcd(b, a%b);
}
int main() {
#ifdef LOCAL
	freopen("D:\\datain.txt", "r", stdin);
#endif
	//cout << gcd(2, 4) << endl;
	//cout << gcd(6, 15) << endl;
	//cout << gcd(1, 8) << endl;
	char f;
	long long a, b, c, d;
	scanf("%lld/%lld %lld/%lld", &a, &b, &c, &d);
	//cout << a << " " << b << " " << c << " "<<d << endl;
	//+
	long long t1, t2, gcd1;
	t1 = a * d + b * c;
	t2 = b * d;
	trunc(a, b);
	cout << " + ";
	trunc(c, d);
	cout << " = ";
	gcd1 = gcd(abs(t1), t2);
	t1 = t1 / gcd1;
	t2 = t2 / gcd1;
	trunc(t1, t2);
	cout << endl;
	//-
	t1 = a * d - b * c;
	t2 = b * d;
	trunc(a, b);
	cout << " - ";
	trunc(c, d);
	cout << " = ";
	gcd1 = gcd(abs(t1), t2);
	t1 = t1 / gcd1;
	t2 = t2 / gcd1;
	trunc(t1, t2);
	cout << endl;
	//*
	t1 = a * c;
	t2 = b * d;
	trunc(a, b);
	cout << " * ";
	trunc(c, d);
	cout << " = ";
	gcd1 = gcd(abs(t1), t2);
	t1 = t1 / gcd1;
	t2 = t2 / gcd1;
	trunc(t1, t2);
	cout << endl;
	// /
	if (c == 0) {
		trunc(a, b);
		cout << " / ";
		trunc(c, d);
		cout << " = Inf\n";
	}
	else {
		trunc(a, b);
		cout << " / ";
		trunc(c, d);
		cout << " = ";
		long long c1 = c;
		if (c < 0) {
			c = -d;
			d = abs(c1);
		}
		else {
			c = d;
			d = c1;
		}
		t1 = a * c;
		t2 = b * d;
		long long gcd1 = gcd(abs(t1), t2);
		trunc(t1 / gcd1, t2 / gcd1);
		cout << endl;
	}
	

}

Search

    Table of Contents