您的位置:首页 > 其它

12:分数求和

2017-03-06 19:49 351 查看

12:分数求和

查看

提交

统计

提问

总时间限制: 1000ms 内存限制: 65536kB描述
输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。

如:5/6、10/3均是最简形式,而3/6需要化简为1/2, 3/1需要化简为3。

分子和分母均不为0,也不为负数。

输入第一行是一个整数n,表示分数个数,1 <= n <= 10;
接下来n行,每行一个分数,用"p/q"的形式表示,不含空格,p,q均不超过10。输出输出只有一行,即最终结果的最简形式。若为分数,用"p/q"的形式表示。样例输入
2
1/2
1/3

样例输出
5/6


#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
long long int a[1000001];
long long int b[1000001];
long long int anszi=1;
long long int ansmu=1;
long long int gcd(long long int a,long long int b)
{
if(a==0)return b;
else return gcd(b%a,a);
}
int main()
{
long long int n;
cin>>n;

for(int i=1;i<=n;i++)
{
scanf("%d/%d",&a[i],&b[i]);
}
if(n==1)
{
long long int gys=gcd(a[1],b[1]);
a[1]=a[1]/gys;
b[1]=b[1]/gys;
if(b[1]==1)
{
cout<<a[1];
return 0;
}
cout<<a[1]<<"/"<<b[1];
return 0;
}
for(int i=1;i<=n-1;i++)
{
ansmu=b[i+1]*b[i];
anszi=a[i]*(ansmu/b[i])+a[i+1]*(ansmu/b[i+1]);
b[i+1]=ansmu;
a[i+1]=anszi;
}
long long int zi=anszi;
long long int mu=ansmu;
long long int gys=gcd(zi,mu);
anszi=anszi/gys;
ansmu=ansmu/gys;
if(ansmu==1)cout<<anszi;
else
{
cout<<anszi<<"/"<<ansmu;
}
return 0;
}


这个题的测试数据比较坑爹

1.要考虑的分母为0的情况

2.要考虑的n为1的情况

3.所有数据全开long long否则最后一个点不过
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: