N个数求和 (20 分)

本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

输入格式:
输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1 a2/b2 …给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。

输出格式:
输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。

输入样例1

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

输出样例1:

3 1/3

输入样例2:

2
4/3 2/3

输出样例2:

2

输入样例3:

3
1/3 -1/6 1/8

输出样例3:

7/24

思路:
这道题是简单的模拟题,但为了防止数据中出现比较狗的数据 (其实这种担心是多余的) ,我的方法是,我在每次计算时模拟累加的过程输出求值(最后写出来的代码可能有些繁琐)。
:最后输出的时候需要考虑分子为零的特殊情况,输出一个0.

代码如下:

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
int n;
vector <int> fz,fm;
int getfz(string a)
{int i,flag=0,sum=0;for(i=0;i<a.size();i++){if(a[i]=='-'){flag=1;continue;}if(a[i]=='/')break;sum=sum*10;sum+=(a[i]-'0');}if(flag==1)return (-1)*sum;return sum;
}
int getfm(string a)
{int i,sum=0;i=a.find('/');for(i=i+1;i<a.size();i++){sum=sum*10;sum+=(a[i]-'0');}return sum;
}
int gcd(int a,int b)
{return (a%b)?gcd(b,a%b):b;
}
int dor(int &o,int &p)
{int x;x=gcd(o,p);o=o/x;p=p/x;return x;
}
int main()
{int i,x,y,zuida,zuixiao,sum;string str;cin>>n;for(i=1;i<=n;i++){cin>>str;x=getfz(str);fz.push_back(x);y=getfm(str);fm.push_back(y);}x=fz[0];y=fm[0];for(i=1;i<fz.size();i++){dor(x,y);zuida=dor(fz[i],fm[i]);sum=y*fm[i];zuida=gcd(y,fm[i]);zuixiao=sum/zuida;//cout<<zuixiao<<endl;x=(zuixiao/y)*x;y=zuixiao;fz[i]=(zuixiao/fm[i])*fz[i];fm[i]=zuixiao;  x+=fz[i];}dor(x,y);int flag=0;if(y<0){y=-y;x=-x;}if(y==0){return 0;}if(x/y!=0){cout<<x/y;flag=1;}if(x%y!=0){if(flag==0){cout<<x%y<<'/'<<y<<endl;}else {cout<<' '<<x%y<<'/'<<y<<endl;}}else if(x==0)cout<<0<<endl;return 0;
}

N个数求和--(PTA天梯赛练习)相关推荐

  1. c 语言输入n个数求和,c++---天梯赛---N个数求和

    ★题目: ★难点:要求只能以有理数和分数去输出结果. ★分析:可以对输入的数据进行通分处理,随后把结果按格式输出. ★代码: #include #include #include using name ...

  2. 【PTA天梯赛练习题目2】

    pta天梯赛练习题目 考试座位号 每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的 ...

  3. pta天梯赛 非常弹得球

    pta天梯赛 7-2 非常弹的球 刚上高一的森森为了学好物理,买了一个"非常弹"的球.虽然说是非常弹的球,其实也就是一般的弹力球而已.森森玩了一会儿弹力球后突然想到,假如他在地上用 ...

  4. pta天梯赛c语言答案,PTA - 团体程序设计天梯赛-练习集(更新中)

    L1-002 打印沙漏 (20 分) 不算沙漏下面,上面部分随着行数增加,字符的总数依次是1,4,9,16-满足row2×2-1<=n,逆推得上半部分行数(算上1)row=sqrt((n+1)/ ...

  5. 『ACM C++』 PTA 天梯赛练习集L1 | 048-49

    今日刷题048-049 ------------------------------------------------L1-048---------------------------------- ...

  6. PTA天梯赛L1刷题总结(三)15分题型(超详细题解)

    多么感人!时隔一年多,我终于来更新15分题型的博文了.突然发现L1的题目量扩充了!一共有哦20道题.哎~都写一遍题解好了.在这里推荐下胡凡的算法笔记!在基础算法和数据结构上给了我很多细致的讲解启发.过 ...

  7. PTA天梯赛 L1-006.连续因子

    题目描述 一个正整数 N 的因子中可能存在若干连续的数字.例如 630 可以分解为 3×5×6×7,其中 5.6.7 就是 3 个连续的数字.给定任一正整数 N,要求编写程序求出最长连续因子的个数,并 ...

  8. PTA 天梯赛 L1-079 天梯赛的善良 (20 分) 详解

    天梯赛是个善良的比赛.善良的命题组希望将题目难度控制在一个范围内,使得每个参赛的学生都有能做出来的题目,并且最厉害的学生也要非常努力才有可能得到高分. 于是命题组首先将编程能力划分成了 106 个等级 ...

  9. pta 天梯赛的善良(C语言实现)

    题目描述 天梯赛是个善良的比赛.善良的命题组希望将题目难度控制在一个范围内,使得每个参赛的学生都有能做出来的题目,并且最厉害的学生也要非常努力才有可能得到高分. 于是命题组首先将编程能力划分成了 10 ...

最新文章

  1. OpenCV下的灰度直方图生成及显示的源码,带详细注释
  2. debian/deepin 15.3 15.4安装jdk 1.7 (或jdk 7),配置默认环境
  3. python写sql语句_简单的(笨的)用python以及SQL语句书写增删改查
  4. 如何提高英语听力(内容摘自NECCS)+ 乘法表
  5. java基础常问面试题,面试必问
  6. Base64转PDF、PDF转IMG(使用pdfbox插件)
  7. 巴菲特:伯克希尔没有所谓的5G核心能力 子公司会涉足相关行业
  8. SQLAlchemy create_engine
  9. 如何使用Syncios Data Recovery直接从 iOS 设备恢复数据?
  10. 【django】 model_to_dict ‘QuerySet‘ object has no attribute ‘_meta‘
  11. 《CCNA学习指南:Cisco网络设备互连(ICND1)(第4版)》——导读
  12. 第一轮通知 | 5月11-13日,中国肠道大会!
  13. python实现图像像素修改脚本
  14. 计算机科学与技术反思录
  15. 概率神经网络(PNN)
  16. Android8.1 SystemUI 之图案锁验证流程
  17. 创建一个基于SpringBoot + MyBatis-Plus 的项目
  18. 渗透测试业务逻辑测试汇总—专项篇
  19. Win7下合并U盘分区
  20. up rom for android,ROMBOTapp下载-ROMBOT安卓版v0.54-upan

热门文章

  1. 华大单片机HC32F005串口烧录程序
  2. <script type=“text/html“>是怎么回事?
  3. 妙味课堂HTML课后练习 03 lesson 虾米
  4. Windows——系统盘重置密码
  5. linux 内存 cma,【原创】(十六)Linux内存管理之CMA
  6. php如何生成一年的日历表_html - PHP如何生成一个指定年份一整年的日历
  7. 大型欧姆龙PLC NJ系列ST语言Ethercat总线24轴
  8. C 语言里的 %2d的意思
  9. qt creator提示no valid kits found
  10. 2022年东南大学计算机考研复试时间是什么时候