【题解搬运】PAT_L1-009 N个数求和
从我原来的博客上搬运。原先blog作废。 
(伪)水题+1,旨在继续摸清这个blog(囧
题目
就是求N个数字的和。麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式。
题解
对读入,可以使用scanf(“%d/%d”,…);来解决读入问题(scanf很强的! 
然后以为自己稳了。。。结果TLE了 
问题在哪里呢?在gcd那里,我一开始加上了b与a的大小判断,然而其实不应该这么做!这样做破坏了尾递归(让gcc没法优gao化shi了),极大的减慢了gcd的速度。
后来删掉了if,引出了个WA2333 
问题在于负数分数的问题,处理如下,在两个地方加以处理了。 
水题想搞事也很容易啊,大意要不得。
代码
#include <bits/stdc++.h>
using namespace std;
#define f1(x,y) for(int x=1;x<=y;++x)
#define f0(x,y) for(int x=0;x!=y;++x)
#define bf1(x,y,z) for(int x=y;x>=z;--x)
#define bf0(x,y,z) for(int x=y;x!=z;--x)
typedef long long ll;
typedef unsigned long long ull;
int gcd(int a,int b)
{
//    if(b>a) swap(a,b);
    return (b==0)?a:(gcd(b,a%b));
}
int lcm(int a,int b)
{
    return a/gcd(a,b)*b;
}
int main()
{
    int n;
    scanf("%d",&n);
    int tota,totb;
    f1(i,n)
    {
        int a,b;
        scanf("%d/%d",&a,&b);
        if(i==1)
        {
            tota=a;totb=b;
        }
        else
        {
            int tmpb=b;
            tmpb=lcm(b,totb);
            tota=tota*tmpb/totb+a*tmpb/b;
            totb=tmpb;
        }
        int g=gcd(abs(tota),abs(totb));
        tota/=g;totb/=g;
        //cout<<tota<<" "<<totb<<endl;
    }
    if(abs(tota)>=abs(totb) || tota==0)
    {
        printf("%d",tota/totb);
        if(tota%totb==0)
            printf("\n");
        else
            printf(" %d/%d\n",abs(tota)%abs(totb),totb);
    }
    else printf("%d/%d\n",tota,totb);
    //printf("%d/%d\n",tota,totb);
    return 0;
}												
											【题解搬运】PAT_L1-009 N个数求和的更多相关文章
- 团体程序设计天梯赛-练习集L1-009. *N个数求和
		
L1-009. N个数求和 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题的要求很简单,就是求N个数字的和.麻烦的是,这些 ...
 - #020PAT 没整明白的题L1-009 N个数求和 (20 分)
		
后面的测试点过不去,两个错误一个超时. 目前未解决 L1-009 N个数求和 (20 分) 本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和 ...
 - 暴力+辗转相除法——N个数求和
		
题目来源 PTA 团体程序设计天梯赛-练习集 L1-009 N个数求和 (20分) https://pintia.cn/problem-sets/994805046380707840/problems ...
 - Java:多个数求和
		
设计思想: 先定义int n,定义输入数的个数,输入一个新建的动态数组,输入数字存入动态数组中,函数转换并求和,最后输出. 程序流程图: 源程序代码: package com; import java ...
 - 天梯赛 L1-009   N个数求和   (模拟)
		
本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数"分子/分母"的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(<=1 ...
 - 【题解搬运】PAT_A1016 Phone Bills
		
从我原来的博客上搬运.原先blog作废. 题目 A long-distance telephone company charges its customers by the following rul ...
 - PAT 天梯赛 L1-009 N个数求和
		
模拟题 题目链接 题解 每次将两个分数进行相加,到最后再将结果化成带分数.主要考察的最大公约数与最小公倍数. 代码如下: #include<cstdio> #include<cstd ...
 - c++---天梯赛---N个数求和
		
★题目: ★难点:要求只能以有理数和分数去输出结果. ★分析:可以对输入的数据进行通分处理,随后把结果按格式输出. ★代码: #include<iostream> #include< ...
 - PAT L1-009 N个数求和(模拟分数加法)
		
本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(<=100).随后一行按格 ...
 
随机推荐
- (第三场) H Diff-prime Pairs 【数论-素数线性筛法+YY】
			
题目链接 题目描述 Eddy has solved lots of problem involving calculating the number of coprime pairs within s ...
 - AQS2:可重入和阻塞
			
本文仅基于可重入的锁(ReentrantLock类)对AQS做分析,只考虑独占锁. 共享锁与独占锁的更多信息,以后再讨论. AQS中队列的实现 节点Node AQS的节点包含了对前置节点的引用pre, ...
 - 使用pako.js实现gzip的压缩和解压
			
poko.js可至Github下载:https://github.com/nodeca/pako 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
 - 八数码(IDA*算法)
			
八数码 IDA*就是迭代加深和A*估价的结合 在迭代加深的过程中,用估计函数剪枝优化 并以比较优秀的顺序进行扩展,保证最早搜到最优解 需要空间比较小,有时跑得比A*还要快 #include<io ...
 - socket 代码实例
			
 1. TCP SOCKET 客户端: #!/usr/bin/env python # -*-coding:utf-8 -*- import socket HOST = 'localhost' PO ...
 - Redis的安装+哨兵模式+集群
			
Redis安装(基于2.8版本) 哨兵(Sentinel集群)模式: 集群(基于3.0+)
 - 使用xlsx把json对象导出excel
			
1,首先使用npm下载xlsx.执行命令 npm install xlsx --save import { Component, OnInit } from '@angular/core'; //im ...
 - MySQL提升课程 全面讲解MySQL架构设计
			
1:并发量:同一时间处理请求数量,同一时间处理请求数量和连接数量是两个概念,连接数大于处理请求数量, MySQL参数最大连接数max_connections 这是是查询数据库当前设置的最大连接数 my ...
 - js如何判断数据类型
			
1.最常见的判断方法:typeof console.log(typeof a) ------------> string console.log(typeof b) ------------&g ...
 - chromium之non_thread_safe
			
先看看介绍 // A helper class used to help verify that methods of a class are // called from the same thre ...