本题的要求很简单,就是求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
分析:
1.首先把正负号理清.
2.还要把分子为0的情况分出,出现除0的情况.
代码如下:
 #include<stdio.h>
#include<stdlib.h>
int gcd(int x,int y)
{
return y?gcd(y,x%y):x;
}
int main()
{
int n,a1,b1,a2,b2,t,p;
scanf("%d",&n);
scanf("%d/%d",&a1,&b1);
n--;
while(n--)
{
scanf("%d/%d",&a2,&b2);
a1=a1*b2+a2*b1;b1*=b2; //进行通分
if(a1<) //p代表正负
a1*=-,p=-;
else if(a1==) //分子为0的情况
{
b1=;continue;
}
else p=;
t=gcd(a1,b1);
a1=a1*p/t;b1/=t;
}
if(abs(a1)%b1==) printf("%d\n",a1/b1); //分类讨论输出
else if(abs(a1)/b1>=) printf("%d %d/%d\n",a1/b1,abs(a1)-abs(a1/b1)*b1,b1);
else printf("%d/%d\n",a1,b1);
}

最新文章

  1. linux 中php以及nginx的重启命令
  2. git clone简介
  3. Live Archive 3644 X-Plosives 解题报告
  4. SQL分布式查询、跨数据库查询
  5. Emacs 列编辑
  6. cocos2d-x 不能在android真机debug的问题
  7. C#中的lock关键字(初识)
  8. [Java] JavaMail 发送带图片的 html 格式的邮件
  9. ZeroMQ(JAVA)中的数据流,SessionBase与SocketBase
  10. 第三弹:ZFNet
  11. 从零开始学习Vue.js,学习笔记
  12. Xamarin 使用极光推送 详细教程
  13. 关于外网无法访问阿里云主机CentOs
  14. [POJ1050]To the Max (矩阵,最大连续子序列和)
  15. [android] 请求码和结果码的作用
  16. 046 SparlSQL中的函数
  17. UIButton 设置阴影效果
  18. 华为笔试——C++字符串四则运算的实现
  19. GIS-008-ArcGIS JS API 全图
  20. bootstrap Table的使用方法

热门文章

  1. yii2 checkbox 的使用实例
  2. 与Cookie相比,Web Storage存在的优势
  3. ASP.NET相关事件及JS的执行顺序
  4. 初试springWebMVC
  5. react中的jsx详细理解
  6. sleep 和wait的差别
  7. Java中Synchronized和Lock的使用
  8. ios 自定义delegate(一)
  9. 下划线hover下动态出现技巧
  10. Shell函数和正则表达式