zoukankan      html  css  js  c++  java
  • N个数求和(模拟)

     

    本题的要求很简单,就是求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的情况.
    代码如下:
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 int gcd(int x,int y)
     4 {
     5     return y?gcd(y,x%y):x;
     6 }
     7 int main()
     8 {
     9     int n,a1,b1,a2,b2,t,p;
    10     scanf("%d",&n);
    11     scanf("%d/%d",&a1,&b1);
    12     n--;
    13     while(n--)
    14     {
    15         scanf("%d/%d",&a2,&b2);
    16         a1=a1*b2+a2*b1;b1*=b2; //进行通分
    17         if(a1<0)    //p代表正负
    18             a1*=-1,p=-1;
    19         else if(a1==0) //分子为0的情况
    20         {
    21             b1=1;continue;
    22         }
    23         else p=1;
    24         t=gcd(a1,b1);
    25         a1=a1*p/t;b1/=t;
    26     }
    27     if(abs(a1)%b1==0) printf("%d
    ",a1/b1);  //分类讨论输出
    28     else if(abs(a1)/b1>=1) printf("%d %d/%d
    ",a1/b1,abs(a1)-abs(a1/b1)*b1,b1);
    29     else printf("%d/%d
    ",a1,b1);
    30 }
  • 相关阅读:
    从网易与淘宝的font-size思考前端设计稿与工作流
    不吹不黑也不撕,我们就简简单单谈谈Vue
    CSS中各种布局的背后(*FC)
    JavaScript七宗罪和一些槽点
    设计糟糕的 RESTful API 就是在浪费时间!
    JavaScript专题之事件循环
    JavaScript知识点
    掌握git基本功
    延迟情况测试点
    Fiddler监听Https请求响应
  • 原文地址:https://www.cnblogs.com/zdragon1104/p/8383699.html
Copyright © 2011-2022 走看看