首页 > 其他分享 >PTA:7-118 N个数求和

PTA:7-118 N个数求和

时间:2024-04-03 18:59:01浏览次数:30  
标签:fenzi temp int 样例 个数 PTA 118 fenmu 分母

作者 陈越

单位 浙江大学

本题的要求很简单,就是求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

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <stdio.h>

int maxgys( int a, int b ) //求最大公约数
{
    int temp;
    if( a < b )
    {
        temp = a;
        a = b;
        b = temp;
    }
    while( a % b != 0 )
    {
        temp = b;
        b = a % b;
        a = temp;
    }
    return b;
}

int main()
{
    int n, a, b, i, fenzi = 0, fenmu = 1, gys;
    scanf( "%d", &n );
    for( i = 0; i < n; i++ )
    {
        scanf( "%d/%d", &a, &b );
        fenzi = fenzi * b + fenmu * a;
        fenmu = fenmu * b;
        if( fenzi == 0 ) //处理第一个分数,直接记录其分子和分母
        {
            fenmu = 1;
            continue;
        }
        gys = maxgys( fenzi, fenmu );
        fenzi = fenzi / gys;  //避免过大超出精度范围 
        fenmu = fenmu / gys;
    }
    if( fenmu == 1 ) //结果为整数
    {
        printf( "%d", fenzi );
    }
    else if( fenzi < fenmu ) //分子小于分母
    {
        printf( "%d/%d", fenzi, fenmu );
    }
    else //分子大于等于分母
    {
        printf( "%d %d/%d", fenzi / fenmu, fenzi % fenmu , fenmu );
    }
    return 0;
}

标签:fenzi,temp,int,样例,个数,PTA,118,fenmu,分母
From: https://blog.csdn.net/2301_81508028/article/details/137355027

相关文章

  • 力扣热门算法题 349. 两个数组的交集,387. 字符串中的第一个唯一字符,394. 字符串解码
    349.两个数组的交集,387.字符串中的第一个唯一字符,394.字符串解码,每题做详细思路梳理,配套Python&Java双语代码,2024.04.02 可通过leetcode所有测试用例。目录349.两个数组的交集解题思路完整代码PythonJava387.字符串中的第一个唯一字符解题思路完整代码Python......
  • PTA数据结构第四章7-2 变身(八进制转成十进制)
    分数20作者 陈晓梅单位 广东外语外贸大学题目给出一个由18位八进制数字组成的序列,要求每六位转成一个十进制数并输出。输入格式:18位八进制数字组成的序列。输出格式:输出转换后的三个十进制数,以空格分隔,行末不能有空格。输入样例:000023452230567134输出样例:......
  • 【蓝桥杯】小明发明了一种给由全大写字母组成的字符串编码的方法。对于每一个大写字母
    【问题描述】小明发明了一种给由全大写字母组成的字符串编码的方法。对于每一个大写字母,小明将它转换成它在26个英文字母中序号,即A→1,B→2,...Z→26。这样一个字符串就能被转化成一个数字序列:比如ABCXYZ→123242526。现在给定一个转换后的数字序列,小明想还原出原本的......
  • pta 1013 数素数
    013数素数分数20全屏浏览切换布局作者 CHEN,Yue单位 浙江大学令 Pi​ 表示第 i 个素数。现任给两个正整数 M≤N≤104,请输出 PM​ 到 PN​ 的所有素数。输入格式:输入在一行中给出 M 和 N,其间以空格分隔。输出格式:输出从 PM​ 到 PN​ 的所有素......
  • 根据一个数组筛选另一个数组的数据,组合成一个新数组
    这段代码定义了两个数组:fixedArray包含国家信息的固定数组,flowArray包含需要筛选的国家代码。然后使用filter方法筛选fixedArray中包含在flowArray中的元素,返回新的数组newArray。最后打印筛选后的新数组。//定义一个包含国家信息的固定数组letfixedArray=[......
  • 输出全排列 pta python
    输入整数n(3<=n<=7),编写程序输出1,2,...,n整数的全排列,按字典序输出。输入格式:一行输入正整数n。输出格式:按字典序输出1到n的全排列。每种排列占一行,数字间无空格。输入样例:在这里给出一组输入。例如:3输出样例:在这里给出相应的输出。例如:123132213231312321......
  • 在Linux中,如何备份一个数据库?
    在Linux系统中,备份数据库是一项重要的维护任务,它可以确保在发生数据丢失或系统故障时能够恢复数据。根据所使用的数据库类型,备份方法会有所不同。以下是针对MySQL和PostgreSQL两种常见数据库的备份方法:1.MySQL数据库备份使用mysqldump工具:mysqldump是MySQL自带的一个命令行......
  • linux中防火墙设置(iptables & firewalld & ufw )
       iptables、firewalld和ufw都是Linux系统中常用的防火墙软件,它们之间的区别如下:   iptables:iptables是Linux系统中最原始、最基础、最底层的防火墙软件,它可以直接配置Linux内核中的网络规则,控制网络数据包的流动。由于iptables配置比较复杂,需要对网络协议和规则有......
  • 每天一个数据分析题(二百四十四)
    LightGBM算法的哪些优化策略有助于提高模型的训练速度?A.Gradient-basedOne-SideSampling(GOSS)B.ExclusiveFeatureBundling(EFB)C.深度优先搜索(DFS)分裂D.使用L1正则化题目来源于CDA模拟题库点击此处获取答案......
  • 求最大公约数的方法---pta---N个数求和
    公约数,简单来讲,可以被两个数都整除的一个数。最大公约数,就是两个数的所有公约数中最大的那一个。求得方法有很多,比如://枚举法inta,b,t;cin>>a>>b;for(inti=1;i<=min(a,b);i++){if(a%i==0&&b%i==0){t=i;}}cout<<t;//辗转相除法:inta,b,t;cin>>a>>b;......