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\n");
36     }
37     else if(abs(fz)<abs(fm)){
38         if(fz*fm<0) printf("-");
39         printf("%lld/%lld\n",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("\n");
47     }
48     return 0;
49 }

原文地址:https://www.cnblogs.com/ChangeG1824/p/10451191.html

时间: 2024-08-27 14:19:04

N个数求和(PTA)的相关文章

0066-若干个数求和问题

若干个数求和问题 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 输入若干个整数(不会超过 10000 个),输出它们的和. 输入 一行包括若干个整数(绝对值不超过100),两两之间用一个空格分隔. 输出 一个数,表示输入所有数的和(结果在 int 范围内). 输入示例 3 2 4 1 5 6 输出示例 21 这题乍一看没毛病,但……不给项数怎么行?!当然行.只是你需要这样一句话: cin.get()=='\n' 意思是:读

Java:多个数求和

设计思想: 先定义int n,定义输入数的个数,输入一个新建的动态数组,输入数字存入动态数组中,函数转换并求和,最后输出. 程序流程图: 源程序代码: package com; import java.util.Scanner; public class Addadd { public static void main(String[] args){ Scanner scan = new Scanner(System.in);//创建Scanner的类对象 int n; System.out.p

ARM中C和汇编的相互调用(5个数求和、字符串拷贝)

开发环境:Keil5 工程目录:   一.汇编调用C——多数相加 使用汇编调用C,需要注意的是参数的传递.不同于X86的传参规则,在ARM体系中,如果形参的个数不超过4个,使用特殊寄存去R0~R3传递:而如果参数大于4个,就要将多出来的那部分参数使用堆栈传递. 压栈的之后移动位置指针,压栈顺序别忘了是最后一个参数先入栈->倒数第二个参数->,,,, 下面的代码实现了五个参数求和,首先使R0=0,R1=1,R2=2,R3=3,第五个参数使用栈传递,并移动堆栈指针. (1)startup.s St

L1-009. N个数求和

第一部分:题目 本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(<=100).随后一行按格式“a1/b1 a2/b2 ...”给出N个有理数.题目保证所有分子和分母都在长整型范围内.另外,负数的符号一定出现在分子前面. 输出格式: 输出上述数字和的最简形式 —— 即将结果写成“整数部分 分数部分”,其中分数部分写成“分子/分母”,要求分子小于分母,且它们没有公因子.如果结果的整

zzuli OJ 1081: n个数求和 (多实例测试)

Description 求n个整数的和. Input 输入第一行是一个整数T,表示有T组测试实例: 每组输入包括两行: 第一行一个数n表示接下来会有n个整数: 第二行空格隔开的n个数. Output 对于每组输入,在一行输出n个数的和(保证和不会超出int类型的范围)! Sample Input 231 2 34-1 0 -19 22 Sample Output 62 HINT Source #include<stdio.h> int main() { int t,a[14],b,c,j,i,

Shell 脚本《两个数求和》

#!/bin/bash #read -r使\取消转义功能 -p提示内容 read -r -p "Please input A: " A read -r -p "Then please input B: " B #$(( )) 比let更好, 注意 $(( )) 里面的变量不用$ sum=$(( A+B )) #printf 默认不会带回车行,echo则不一样 printf "A+B=%d" $sum 原文地址:http://blog.51cto.

PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)

PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:      欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/problem-sets/994805046380707840/problems 目录 (点击对应题目即可进入相应题解--小声BB--) L1-001 Hello World (5 分) L1-002 打印沙漏 (20 分) L1-003 个位数统计 (15 分) L1-004 计算摄氏温度 (5

java从命令行接收多个数字,求和之后输出结果

设计思想:获取输入数的个数,然后将要相加的数字转换成为浮点型进行相加,最后进行输出 流程图 :   开始-->输入n个数-->求和-->输出结果-->结束: 源代码: //王浩  2015/9/26 package add; import java.util.Scanner; public class Add { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n

Java多个数相加源代码流程图设计思想

一.设计思想: 1.理解题目要求,即  编写程序完成多个数字相加并输出结果,题目中的难点就是命令行的参数为字符串,需要经过转化变为数字后进行计算,通过查询互联网得到解决问题方法,用“*.nextInt()”函数即可解决此问题. 2.设计程序的结构,先申请动态空间,完成可输入多个数字的要求. 最后通过输入.计算.输出完成程序. 二.程序流程图 三.源代码 package sum; import java.util.Scanner; public class Text { public static