分数相加[通俗易懂]

分数相加[通俗易懂]本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。输入格式:输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

本题的要求很简单,就是求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 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int GCD(int a,int b)
 5 {
 6     if(a%b==0)
 7         return b;
 8     return GCD(b,a%b);
 9 }
10 int main()
11 {
12     int n,i;
13     scanf("%d",&n);
14     int x,y;
15     int zi=0,mu=1;
16     for(i=0; i<n; i++)
17     {
18         scanf("%d/%d",&x,&y);
19         int h=mu*y/GCD(y,mu);
20 
21         zi=h/y*x+h/mu*zi;
22     mu=h;
23         int j=GCD(zi,mu);
24         if(j!=0)
25         {
26             mu/=j;
27             zi/=j;
28         }
29     }
30     if(zi==0)
31     {
32         printf("0\n");
33     }
34     else if(abs(zi)<abs(mu))
35     {
36         if(zi*mu<0) printf("-");
37         printf("%d/%d\n",abs(zi),abs(mu));
38     }
39     else
40     {
41         printf("%d",zi/mu);
42         if(zi%mu)
43         {
44             printf(" %d/%d",abs(zi%mu),abs(mu));
45         }
46         printf("\n");
47     }
48     return 0;
49 }

View Code

注意输出格式以及分子为零

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167105.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 程序员如何学习量化交易,一文总结

    程序员如何学习量化交易,一文总结最近有位金融行业的朋友想把一个盈利能力很强的策略做成量化程序遇到问题,问题是这样的线程A在while(true)的循环里做条件判断,循环耗时1分钟。循环结束判断条件满足的时候调用交易接口下单建仓。想实现条件成立马上建仓,而不需要等待1分钟的循环。想通过多进程或者多线程方式,但两个线程不知道如何交互。对有经验的开发来说这样的逻辑很简单,只要通过线程通信的方式就可以实现。A线程判断到满足条件就发个消息给B线程,B线程while(true)等待消息就行。技术本身不复杂,只是没接触过编程的不知道还可以这么干

    2022年6月26日
    33
  • 十款最实用的Android UI设计工具

    十款最实用的Android UI设计工具十款最实用的AndroidUI设计工具

    2022年6月25日
    28
  • request.getRealPath()方法不推荐使用

    request.getRealPath()方法不推荐使用ServletActionContext.getRequest().getRealPath(“”);getRealPath上面有删除线是因为已经不推荐这样使用了ThemethodgetRealPath(String)fromthetypeServletRequestisdeprecated可以使用ServletActionContext.getRequest().

    2022年9月19日
    1
  • RSA加密算法心得

    RSA加密算法心得RSA加密密钥是非对称的,一般是成对出现分为公钥和私钥,所以也叫非对称加密,可以公钥加密,私钥解密,也可以私钥加密,公钥解密。一般用于数据加密。

    2022年5月31日
    57
  • MATLAB分段函数及应用实例

    MATLAB分段函数及应用实例简单实例:用matlab画分段函数        当x&lt;0时 y=5*sin(x);        当x&gt;=0且x&lt;=5时y=x^2;        当x&gt;5时y=(8-x)^2+16.x=-5:0.001:10;y=5*sin(x).*(x&lt;0)+x.^2.*(x&gt;=0&amp;x&lt;=5)+((8-x).^2+16).*(x&gt;5);p…

    2022年6月7日
    45
  • 线程池面试题一般会怎么问?线程池面试题总结及答案整理

    线程池面试题一般会怎么问?线程池面试题总结及答案整理对于广大程序员来说,线程池一定不会陌生,因为大部分程序员面试时总会被问到关于线程池的问题,今天总结了一些关于线程池的各种面试可能问到的题目,希望对大家有所帮助。一、线程池是什么?答:线程池,是一种多线程处理形式,在处理过程中将任务添加到队列中,然后在创建线程后自动启动这些任务。比如把线程池看成一个容器,集中管理线程。线程使用完不会销毁,会先储存在线程池中。二、线程池有几种?答:常见的线程池有四种。newCachedThreadPool创建一个可缓存的线程池,如果线程池长度超过处理需要,

    2022年5月5日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号