• 团体程序设计天梯赛PTA L1-009 N个数求和


    题意:求N个分数的和,用带分数的形式输出

    思路:算出各个分母的最小公倍数,在进行分子相加,最后化简

     1 #include<stdio.h>
     2 #include<math.h>
     3 //辗转相除法求出最大公约数
     4 
     5 int g(long long x,long long y)
     6 {
     7     if(x%y==0)
     8         return y;
     9     return g(y,x%y);
    10 }
    11 int main()
    12 {
    13     long long n,i,s=0;
    14     scanf("%lld",&n);
    15     int a[n+2],b[n+2];//分别代表分母、分子
    16     for(i=1; i<=n; i++)
    17     {
    18         scanf("%lld/%lld",&a[i],&b[i]);
    19     }
    20     long long m=1;
    21     for(i=2; i<=n; i++)
    22     {
    23         //求出最小公倍数
    24         m=b[i]*b[i-1]/g(b[i],b[i-1]);
    25     }
    26     for(i=1; i<=n; i++)
    27     {
    28         //化成分母相同,进行分子相加
    29         a[i]=a[i]*m/b[i];
    30         s+=a[i];//s是分子相加的总和
    31     }
    32     long long int j,da=0;
    33     j=s;//用j存下s
    34     s/=m;//算出整数部分
    35     if(s==0&&j==0)//如果整数部分和分数部分都是0
    36         printf("0
    ");
    37     else if(s!=0)
    38     {
    39         da=1;
    40         printf("%lld",s);
    41     }
    42     j=j-s*m;
    43     if(j!=0)
    44     {
    45         if(da==1)
    46             printf(" ");
    47         int t=g(j,m);//化简
    48         printf("%lld/%lld",j/t,m/t);
    49     }
    50     return 0;
    51 }
  • 相关阅读:
    异步-promise、async、await
    node
    node基础 day1
    gulp的简介以及使用方法
    web前端安全——常见的web攻击方法
    Linux修改IP地址
    在linux下批量删除文件
    常用内容的正则表达式
    Oracle 数据库自带用户有哪些
    统计Oracle数据库当前User下各表的记录数
  • 原文地址:https://www.cnblogs.com/dark-ming/p/13607704.html
Copyright © 2020-2023  润新知