【题目描述】
【输入】
第一行是一个整数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;
}
标签:tmp,分数,1209,qp,int,denominator,numerator,通题,信奥 From: https://www.cnblogs.com/nanshaquxinaosai/p/18405734