PTA甲级考试真题练习81——1081 Rational Sum

题目

在这里插入图片描述

思路

分数处理题,考察最小公倍数和最大公因数,以及同分

代码

#include <iostream>
using namespace std;
long long MaxCommonDivisor(long long a, long long b) {
	if (b == 0)  return a;
	return MaxCommonDivisor(b, a % b);
}
long long MinCommonMutiple(long long a, long long b) {
	long long d = MaxCommonDivisor(a, b);
	return (a / d) * b;
}
int main()
{
	int n;
	cin >> n;
	long long all_up = 0, all_down = 1;
	for (int i = 0; i < n; ++i) {
		long long up, down;
		scanf_s("%lld/%lld", &up, &down);
		if (up == 0 || down == 0)
			continue;
		if (i == 0) {
			all_up = up;
			all_down = down;
		}
		else {
			//求最小公倍数
			long long min = MinCommonMutiple(all_down, down);
			all_up = all_up * (min / all_down) + up*(min / down);
			all_down = min;
		}
	}
	//最小化
	long long min = MaxCommonDivisor(all_up,all_down);
	all_up /= min;
	all_down /= min;
	if (all_up == 0) {
		cout << "0";
		return 0;
	}
	long long inter = all_up / all_down;
	if (inter != 0){
		all_up %= all_down;
		if(all_up!=0)
			cout << inter <<" ";
		else
			cout << inter;
	}
	if (all_up!= 0) {
		cout << all_up <<"/"<<all_down;
	}
}
发布了153 篇原创文章 · 获赞 4 · 访问量 3799

猜你喜欢

转载自blog.csdn.net/qq_43647628/article/details/105339921