PTA之N个数求和(细节题)天梯赛

简介: 编程题,要求计算以分子/分母形式给出的一组有理数的和,输出结果也要是最简有理数形式。输入包含正整数N(N≤100)及N个有理数,输出为和的最简形式。示例:输入5个数2/5, 4/15, 1/30, -2/60, 8/3,输出3 1/3;输入2个数4/3, 2/3,输出2。代码中包含求最大公约数的函数和计算有理数和的主要逻辑。

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

输入格式:

输入第一行给出一个正整数N100)。随后一行按格式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

#include

long long  zui(long long a,long long b)

{

   /*if(a%b!=0)return zui(b,a%b);

   else

       return b; */

  /* long long n;

 

 while(b!=0)

 {

   n=a%b;

   a=b;

   b=n;

 }

 return a;*///这是一种利用辗转相除法求最大公约数的方法(可用)

   if(b!=0)return zui(b,a%b); //这是一种递归求公约数的方法,其基本原理也是利用辗转相除法(可用)

}

int main()

{

 long  long a[150],c[150];

 long  long b,d,c1,c2,sum1=0,sum2=0,k=0,h=0;

 char ch;

 scanf("%lld",&b);//规定的分数的个数

 for(int i=0;i<b;i++)

 {

   scanf("%lld%c%lld",&a[i],&ch,&c[i]);//此处也可写为scanf("%lld/%lld",&a[i],&c[i]);

   

 }

 sum2=c[0];

 for(int i=1;i<b;i++)

 {

   k=sum2*c[i];

   sum2=k/zui(sum2,c[i]);//此处是求各个分数的公分母,为了不使值超出long long的范围,每两项求一下最小公倍数;---北冥注释

 }

 for(int m=0;m<b;m++) { sum1=sum1+a[m]*(sum2/c[m]);//求各个分子的和;(sum2/c[m])必须加括号因为如果先算a[m]*sum2会导致数可能超出 } // long long 的范围; 当然也可写成sum2/c[m]*a[m]的形式,此处只是提醒一下 d=zui(sum1,sum2); // 这个细节,因为这个坑很难发现---北冥注释QQ80374779 c1=sum1/d; c2=sum2/d; if(c1%c2==0)printf("%lld",c1/c2);//因为如果有整数部分时负号总是出现在整数部分,所以此处不必考虑负号的有无 if(c1%c2!=0) { if(c1/c2!=0)printf("%lld ",c1/c2); if(c2>=0)printf("%lld/%lld",c1%c2,c2);//如果分子中没有负数

   if(c2<0)                             //如果分子中有负数,把负数变为正数

   {                                    

     c2=-c2;                          

     if(c1/c2==0)printf("-");     //如果此分母没有整数部分,那么此时负号必须移动到分子前面;

     printf("%lld/%lld",c1%c2,c2);

   }  

 }

 return 0;

}

目录
相关文章
|
算法
初探PID—速度闭环控制
本文简单介绍了什么是PID,PID的作用,给出了PID实现程序。
592 0
|
6月前
|
存储 安全 数据安全/隐私保护
如何快速部署 ERPNext 多版本?
本文介绍了 ERPNext 多版本快速部署的几种方法,包括基于 Docker 的容器化部署、使用 websoft9 工具的一键部署以及虚拟机部署方案。每种方法适用于不同场景,如功能测试、非技术用户操作或高隔离需求环境。同时涵盖多版本使用的典型场景,如升级测试、团队并行使用和插件兼容性验证,并强调资源分配、数据备份、安全防护等注意事项,助力企业高效管理 ERPNext 多版本应用。
|
8月前
|
人工智能 前端开发 开发工具
9.2K Star!微信排版从未如此简单,这款开源神器让Markdown飞入公众号!
一款9.2K Star的开源神器,让微信公众号排版变得简单高效!支持Markdown语法,实时预览、多图床混搭、AI智能排版、自定义主题样式等功能一应俱全。通过沉浸式双栏编辑、七图床混合编排、AI写作助手和主题定制工坊等核心功能,彻底解放技术创作者的生产力。无论是技术博客迁移、多平台发布还是企业定制,都能满足需求。三步上手:在线体验、本地部署、公众号对接。项目地址:https://github.com/doocs/md
1077 4
|
C++
【PTA】​ L1-009 N个数求和​ (C++)
【PTA】​ L1-009 N个数求和​ (C++)
692 0
【PTA】​ L1-009 N个数求和​ (C++)
|
弹性计算 安全 网络安全
阿里云国际版无法远程连接Windows服务器的解决方法
阿里云国际版无法远程连接Windows服务器的解决方法
|
前端开发 安全 开发者
【通义灵码实践】实现经典手机游戏推箱子
本文介绍了使用通义灵码辅助实现经典推箱子游戏的过程。首先,通过输入“用Python写一个推箱子游戏”,灵码生成了基本的终端版本代码,包括地图渲染、玩家移动和胜利检测等功能。然而,终端版本交互体验不佳。为了解决这一问题,再次输入“不要在终端上运行,希望可以在页面上运行”,灵码生成了基于Flask的后端代码和HTML前端代码,实现了网页版推箱子游戏。最终结果展示了游戏的完整实现,包括前后端交互和用户界面。总结中提到,该方法具有快速生成代码、代码质量高、易于扩展等优点,但也存在功能简单、样式和用户体验有限、错误处理不足等问题,适合快速原型开发和教学演示。
450 2
|
网络协议 安全 网络安全
图解OSI七层模型,2024最强科普!
【7月更文挑战第20天】
3874 2
图解OSI七层模型,2024最强科普!
|
存储 人工智能 C++
【PTA】L1-064 估值一亿的AI核心代码(详C++)
【PTA】L1-064 估值一亿的AI核心代码(详C++)
507 1
|
SQL 关系型数据库 MySQL
【MySQL核心】MySQL无法启动?批量恢复MySQL 物理文件-拯救即将跑路的你
【MySQL核心】MySQL无法启动?批量恢复MySQL 物理文件-拯救即将跑路的你
|
图形学
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏15(附项目源码)
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏15(附项目源码)
305 0