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

来源:互联网 发布:php面试常用函数大全 编辑:程序博客网 时间:2024/05/12 16:45

题目链接:https://www.patest.cn/contests/gplt/L1-009

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>using namespace std;#define INF 0x3f3f3f3ftypedef 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;}


0 0
原创粉丝点击