您的位置:首页 > 其它

PAT L1-009. N个数求和 模拟

2016-07-14 15:41 465 查看
题目链接:https://www.patest.cn/contests/gplt/L1-009

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>

using namespace std;

#define INF 0x3f3f3f3f

typedef long long ll;

typedef struct node
{
ll a,b;
}fraction;

ll gcd(ll a,ll b)
{
if(b==0)
return a;
else
return gcd(b,a%b);
}

ll lcm(ll a,ll b)
{
ll tmp=gcd(a,b);
return a*(b/tmp);
}

int main()
{
int n;
while(cin>>n){
fraction sum;
int flag1=0; //结果是否有整数部分
int flag2=0; //结果是否为负数
scanf("%lld/%lld",&sum.a,&sum.b);
for(int i=0;i<n-1;i++){
ll a,b;
scanf("%lld/%lld",&a,&b);
ll fm=lcm(sum.b,b);
ll fz=sum.a*(fm/sum.b)+a*(fm/b);
sum.a=fz; sum.b=fm;
}

ll fz=sum.a,fm=sum.b;
if(!fz) //结果为0的情况
printf("0");
if(fz/fm){
printf("%lld",fz/fm);
flag1=1;
}
if(fz<0){
flag2=1;
fz=-fz;
}
if(fz%fm){
fz=fz%fm;
ll tmp=gcd(fz,fm);
if(flag1)    printf(" ");
if(!flag1&&flag2)   printf("-");//没有整数部分但分数部分为负的情况
printf("%lld/%lld",fz/tmp,fm/tmp);
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息