信奥一本通题陈老师解题:1209:分数求和

【题目描述】

【输入】

第一行是一个整数nn,表示分数个数,1≤n≤101≤n≤10;

接下来nn行,每行一个分数,用"p/qp/q"的形式表示,不含空格,p,qp,q均不超过1010。

【输出】

输出只有一行,即最终结果的最简形式。若为分数,用"p/qp/q"的形式表示。

【输入样例】

2
1/2
1/3

【输出样例】

5/6

 

#include <iostream>
using namespace std;
/* 方法运行超时 
void solve(int numerator, int denominator,int n)
{
	if(denominator==1)
	{
		cout<<numerator<<endl;
		return;
	}
	if(n<=1)
	{
		cout<<numerator<<"/"<<denominator<<endl;
		return;
	}
	if(numerator%n==0&&denominator%n==0)
	{
		numerator/=n;
		denominator/=n;
	}
	solve(numerator,denominator,n-1);
}
*/

int gcd(int a,int b) //辗转相除法求最大公约数 
{
	return a%b==0?b: gcd(b,a%b);
}

int main()
{
	int n,numerator,denominator,tmp_numerator,tmp_denominator;
	char c;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>tmp_numerator>>c>>tmp_denominator;
		if(i==1)
		{
			numerator=tmp_numerator;
			denominator=tmp_denominator;
		}
		else //通分 
		{	
			numerator=numerator*tmp_denominator+tmp_numerator*denominator;//顺序跟下面不能倒过来 
			denominator*=tmp_denominator; //总分母
		}
	}
	int tmp=gcd(numerator,denominator); //最大公约数 
	numerator/=tmp;
	denominator/=tmp;
	if(denominator==1)
		cout<<numerator;
	else
		cout<<numerator<<"/"<<denominator<<endl;
	//solve(numerator,denominator,max(numerator,denominator));
	return 0;
}

 

posted @ 2024-09-10 08:47  信奥赛老师  阅读(285)  评论(0)    收藏  举报