• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
村雨sup
自己选的路,跪着也要走完 XD
博客园    首页    新随笔    联系   管理    订阅  订阅
PAT Rational Sum

Rational Sum (20)

时间限制 1000 ms 内存限制 65536 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小)

题目描述

Given N rational numbers in the form "numerator/denominator", you are supposed to calculate their sum.

输入描述:

Each input file contains one test case. Each case starts with a positive integer N (<=100), followed in the next line N rational numbers "a1/b1 a2/b2 ..." where all the numerators and denominators are in the range of "long int".  If there is a negative number, then the sign must appear in front of the numerator.


输出描述:

For each test case, output the sum in the simplest form "integer numerator/denominator" where "integer" is the integer part of the sum, "numerator" < "denominator", and the numerator and the denominator have no common factor.  You must output only the fractional part if the integer part is 0.

输入例子:

5
2/5 4/15 1/30 -2/60 8/3

输出例子:

3 1/3

#include<iostream>
#include<cstring>
#include<string>
using namespace std;

long long gcd(long long x,long long y){
    return y?gcd(y,x%y):x;
}

long long lcm(long long x,long long y){
    return  x/gcd(x,y)*y;
}

char s[111];

int main(){
    long long a=0,b=1; //a / b
    int n;
    cin >> n;
    while(n--){
        cin >> s;
        char *t = strstr(s,"/");
        if(t) *t = ' ';
         
         // a/b + c/d
        long long c,d;
        sscanf(s,"%lld %lld",&c,&d);
        long long aa = a*d + b*c;
        long long bb = b*d;
        long long g = gcd((aa<0)?(-aa):aa,bb);
        a = aa/g;
        b = bb/g;
    }
    long long x = a/b,y = a%b;
    if(y == 0) printf("%lld\n",x);
    else{
        if(x) printf("%lld ",x);
        printf("%lld/%lld\n",y,b);
    }
    return 0;
} 

 

posted on 2019-04-06 23:39  村雨sup  阅读(143)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3