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

    7-1 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只输出分数部分(0特殊,输出0),否则整数、分数分开(分数部分都为正数) 这题自己也整了很久,卡17,后来去找了一下题解跑一下发现都有同样的问题(
    -3/2的时候他们的结果都是-1 1/-2,个人觉得这样是过不了的)
    真的自闭,在认为自己思路正确的情况下修改为如下代码:

     

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #define ll long long
     5 using namespace std;
     6 
     7 ll gcd(ll a,ll b)
     8 {
     9     return a%b==0?b:gcd(b,a%b);
    10 }
    11 
    12 void solve(ll &a,ll &b)
    13 {
    14     ll yue=gcd(a,b);
    15     if(yue){
    16         a/=yue;
    17         b/=yue;
    18     }
    19 }
    20 
    21 int main()
    22 {
    23     int n;
    24     ll x,y,fz=0,fm=1;
    25     scanf("%d",&n);
    26     for(int i=0;i<n;i++){
    27         scanf("%lld/%lld",&x,&y);
    28         ll yue=gcd(fm,y),bei=fm/yue*y;
    29         fz=fz*(bei/fm)+x*(bei/y);
    30         fm=bei;
    31         solve(fz,fm);
    32     }
    33     //仅为0时输出整数部分0
    34     if(fz==0){
    35         printf("0
    ");
    36     }
    37     else if(abs(fz)<abs(fm)){
    38         if(fz*fm<0) printf("-");
    39         printf("%lld/%lld
    ",abs(fz),abs(fm));
    40     }
    41     else{
    42         printf("%lld",fz/fm);
    43         if(fz%fm){
    44             printf(" %lld/%lld",abs(fz%fm),abs(fm));
    45         }
    46         printf("
    ");
    47     }
    48     return 0;
    49 }
  • 相关阅读:
    一、Javadoc文档标记
    0-写在java系列文章之前
    Tomcat全攻略
    linux使用普通账户时,无法登录,提示“-bash: fork: retry: Resource temporarily unavailable”
    在Linux下安装和使用MySQL
    linux下修改jdk环境变量的方法
    linux下卸载系统自带或者非自带的jdk
    linux中 /etc/profile的作用
    每天一个linux命令:tar命令-jia2
    如何使用蓝湖设计稿同时适配PC及移动端
  • 原文地址:https://www.cnblogs.com/ChangeG1824/p/10451191.html
Copyright © 2011-2022 走看看