1088 Rational Arithmetic (20分)

在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<cmath>
#include<string>
using namespace std;
long long gcd(long long a, long long b) {	//找最大公因数
	if (b == 0)
		return a;
	else return gcd(b, a%b);
}
/*
分子分母均取绝对值,正负单独讨论;特别注意整数部分和分子的特殊情况。
*/
string getNum(long long n, long long d) {
	string res = "";
	if (n == 0)
		return "0";
	if (d == 0)
		return "Inf";
	bool negative = n < 0 && d > 0 || n > 0 && d < 0;
	n = abs(n), d = abs(d);
	long long k = n / d;
	n %= d;
	long long maxCommonFactor = gcd(n, d);
	n /= maxCommonFactor;
	d /= maxCommonFactor;
	if (negative) {
		res += "(-";
	}
	if (k != 0) {	//整数部分
		res.append(to_string(k));
		if (n != 0)
			res.append(" ");
	}
	if (n != 0) {
		res += to_string(n) + "/" + to_string(d);
	}
	if (negative)
		res += ")";
	return res;
}
int main() {
	long long n1, d1, n2, d2;
	scanf("%lld/%lld %lld/%lld", &n1, &d1, &n2, &d2);
	long long n3, d3;
	cout << getNum(n1, d1) << " + " << getNum(n2, d2) << " = " << getNum(n1 * d2 + n2 * d1, d1 * d2) << endl;
	cout << getNum(n1, d1) << " - " << getNum(n2, d2) << " = " << getNum(n1 * d2 - n2 * d1, d1 * d2) << endl;
	cout << getNum(n1, d1) << " * " << getNum(n2, d2) << " = " << getNum(n1 * n2, d1 * d2) << endl;
	cout << getNum(n1, d1) << " / " << getNum(n2, d2) << " = " << getNum(n1 * d2, d1 * n2) << endl;
}
发布了61 篇原创文章 · 获赞 0 · 访问量 795

猜你喜欢

转载自blog.csdn.net/weixin_43116322/article/details/104052937