L1-009 N个数求和(Java)

题目

本题的要求很简单,就是求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. 首先得要考虑如何去构造输入数据,利用String类的split分割/分别存储分子和分母,因为题目需要数字和的最简形式,所以在分数相加(也就是分母和分母,分子和分子)之后,简化分数(获取他们的最大公约数进行约分)
  2. 最后就是输出格式,整数、带分数、纯分数,这三种,分别作不同情况的讨论。

解题过程遇到的问题

  1. 构造输入数据,特别是scanner.next(),并不能是使用nextLong()或者nextInt()。拿到之后做拆分,分别存为分子和分母。
  2. 如何让所有分数进行相加并且为最简形式,设置总分子和总分母,让每一次的相加都为最简即可。
  3. 最大公约数和最小公倍数的模版要记得!
/*** 最大公约数* * @param a* @param b* @return*/public static int getGcd(int a, int b) {while (a % b != 0) {int mod = a % b;a = b;b = mod;}return b;//return b == 0 ? a : getGcd(b, a % b);}// 第二种解法// public static int getGcd(int a, int b) {//        while( a != b){//            if(a<b){//            	  b = b-a;//            }else{//               a = a-b;//            }//        }//        return a;//    }/*** 最小公倍数* * @param a* @param b* @return*/public static int getLcm(int a, int b) {return a * b / getGcd(a, b);}

代码

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = scanner.nextInt();long sumFenzi = 0; // 总分子long sumFenmu = 1; // 总分母for (int i = 0; i < N; i++) {String[] fraction = scanner.next().split("/");long fenzi = Long.parseLong(fraction[0]);long fenmu = Long.parseLong(fraction[1]);// 分数相加sumFenzi = sumFenzi * fenmu + fenzi * sumFenmu;sumFenmu *= fenmu;// 简化分数long gcd = gcd(sumFenzi, sumFenmu);sumFenzi /= gcd;sumFenmu /= gcd;}// 输出格式化结果printFraction(sumFenzi, sumFenmu);}private static long gcd(long a, long b) {
//        return b == 0 ? a : gcd(b, a % b);while(a % b != 0){long mod = a % b;a = b;b = mod;}return b;}private static void printFraction(long a, long b) {if (a % b == 0) { // 整数System.out.println(a / b);} else if (Math.abs(a) > b) { // 带分数long integerPart = a / b;long fractionalPart = a % b;System.out.println(integerPart + " " + Math.abs(fractionalPart) + "/" + b);} else { // 纯分数System.out.println(a + "/" + b);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/607040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51单片机之按键和数码管

51单片机之按键和数码管 ✍前言&#xff1a;♐独立按键&#x1f600;独立按键的原理&#x1f600;软件实现按键控制LED灯的亮灭 ♐数码管&#x1f60a;数码管显示数字或者字母的原理&#x1f409;共阳极数码管&#x1f409;共阴极极数码管&#x1f409;4位1体数码管 &#x1f6…

Go 语言为什么不支持并发读写 map

Go语言的map类型不支持并发读写的主要原因是并发读写会导致数据竞态&#xff08;data race&#xff09;&#xff0c;这意味着多个 goroutine 可能同时访问并修改同一个 map&#xff0c;从而引发不确定的结果。 在Go语言的设计中&#xff0c;为了防止数据竞态&#xff0c;不同于…

大数据StarRocks(六) :Catalog

StarRocks 自 2.3 版本起支持 Catalog&#xff08;数据目录&#xff09;功能&#xff0c;实现在一套系统内同时维护内、外部数据&#xff0c;方便您轻松访问并查询存储在各类外部源的数据。 1. 基本概念 内部数据&#xff1a;指保存在 StarRocks 中的数据。 外部数据&#xf…

分布式系统架构设计之分布式消息队列架构解析

分布式消息队列架构是构建在分布式系统之上的消息队列架构&#xff0c;旨在提高高性能、高可用性和可伸缩性。它包括以下架构相关部分&#xff1a; 1、架构优势 分布式消息队列架构的优势主要体现在以下几个方面&#xff1a; 01 高可用性 在分布式消息队列架构中&#xff0…

uni-app顶部下拉舒心

下拉刷新实际上是在用户操作下拉交互时重新调用接口&#xff0c;然后将新获取的数据再次渲染到页面中。 操作步骤 基于 scroll-view 组件实现下拉刷新&#xff0c;需要通过以下方式来实现下拉刷新的功能。 配置 refresher-enabled 属性&#xff0c;开启下拉刷新交互监听 ref…

ARM架构—— Cortex-M3与Cortex-M4特点概述

一、Cortex-M3与Cortex-M4异同点 相同点&#xff1a; 基于ARM-v7-M架构。三级流水线设计。哈佛总线架构&#xff0c;统一的存储器空间&#xff1a;指令和地址总线使用相同的地址空间。32位寻址&#xff0c;支持4GB 存储空间。基于ARM AMBA&#xff08;高级微控制器总线架构&a…

在docker上运行LCM

目录 1.加载镜像并进入容器 2.安装依赖 3.在docker外部git-clone lcm 4.将get-clone的lcm复制到容器中 5.编译库 6.将可执行文件复制到容器中 7.进入可执行文件 8.编译可执行文件 9.再开一个终端运行程序 10.将以上容器打成镜像并导出 1.加载镜像并进入容器 sudo do…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)在TcpConnection 中接收并解析Http请求消息

一、在TcpConnection 中多添加和http协议相关的request和response struct TcpConnection {struct EventLoop* evLoop;struct Channel* channel;struct Buffer* readBuf;struct Buffer* writeBuf;char name[32];// http协议struct HttpRequest* request;struct HttpResponse* r…

Java10:内部类

7 内部类&#xff08;了解&#xff09;7.1 成员内部类7.2 静态内部类7.3 局部内部类7.4 匿名内部类 2.3. 静态内部类2.4. Lambda表达式&#xff0c; 7 内部类&#xff08;了解&#xff09; 内部类&#xff1a;就是在一个类的内部再定义一个类。 分类&#xff1a; 成员内部类 静…

压力测试对系统研发的作用是什么?

在回答这个问题之前&#xff0c;我们先来看看压力测试到底是什么&#xff1f; 压力测试是一种非功能性的软件测试方法&#xff0c;它通过模拟极端或者异常条件下的负载&#xff0c;来评估系统的性能、稳定性、可靠性和可扩展性。这种测试方法通常会模拟多用户同时访问系统、大数…

LabVIEW在旋转机械故障诊断中的随机共振增强应用

在现代工业自动化领域&#xff0c;准确的故障诊断对于保障机械设备的稳定运行至关重要。传统的故障检测方法往往因噪声干扰而难以捕捉到微弱的故障信号。随着LabVIEW在数据处理和系统集成方面的优势日益凸显&#xff0c;其在旋转机械故障诊断中的应用开始发挥重要作用&#xff…

​油烟净化器电源安全,保障健康餐饮生活

我最近分析了餐饮市场的油烟净化器等产品报告&#xff0c;解决了餐饮业厨房油腻的难题&#xff0c;更加方便了在餐饮业和商业场所有需求的小伙伴们。 随着人们生活水平的提高&#xff0c;餐饮业也得到了快速发展。然而&#xff0c;餐饮油烟污染也成为了人们关注的焦点。 油烟中…

Spring学习 Spring整合MyBatis

6.1.创建工程 6.1.1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.ap…

20240108移远的4G模块EC20在Firefly的AIO-3399J开发板的Android11下调通的步骤

20240108移远的4G模块EC20在Firefly的AIO-3399J开发板的Android11下调通的步骤 2024/1/8 17:50 缘起&#xff1a;使用友善之臂的Android11可以让EC20上网&#xff0c;但是同样的修改步骤&#xff0c;Toybrick的Android11不能让EC20上网。最后确认是selinux的问题&#xff01; …

Linux文件系统与日志分析

目录 一、Linux文件系统 1、inode与block 2、查看inode号码的命令 3、inode包含文件的元信息 4、Linux系统文件的三个主要时间属性 5、用户通过文件名打开文件时系统内部过程 6、inode的大小 7、inode的特点 二、日志 1、日志的功能 2、日志文件的分类 3、系统日志…

解锁前端新潜能:如何使用 Rust 锈化前端工具链

前言 近年来&#xff0c;Rust的受欢迎程度不断上升。首先&#xff0c;在操作系统领域&#xff0c;Rust 已成为 Linux 内核官方认可的开发语言之一&#xff0c;Windows 也宣布将使用 Rust 来重写内核&#xff0c;并重写部分驱动程序。此外&#xff0c;国内手机厂商 Vivo 也宣布…

语言栏中的半角和全角

语言栏中的半角和全角 1. 语言栏2. Halfwidth and fullwidth forms3. Monospaced fontReferences 1. 语言栏 任务栏设置 时间和语言 输入 高级键盘设置 文本服务和输入语言 2. Halfwidth and fullwidth forms 半角和全角&#xff0c;别名半形和全形。 In CJK (Chinese, Japa…

并发编程之CASAtomic原子操作

目录 什么是CAS&#xff1f; CAS 原子操作的三大问题 ABA问题 循环时间长开销大 只能保证一个共享变量的原子操作 jdk中的原子操作类 AtomicInteger AtomicLong AtomicReference LongAdder 什么是CAS&#xff1f; CAS是“比较并交换”&#xff08;Compare and Swap&a…

sentinel入门,转载的,不记得在哪复制的了

sentinel 基本概念 开发的原因&#xff0c;需要对吞吐量&#xff08;TPS&#xff09;、QPS、并发数、响应时间&#xff08;RT&#xff09;几个概念做下了解&#xff0c;查自百度百科&#xff0c;记录如下&#xff1a; 响应时间(RT)   响应时间是指系统对请求作出响应的时间。…

python按列写入数据到excel

要将数据按列写入 Excel&#xff0c;可以使用 Python 的 openpyxl 库。 首先&#xff0c;需要安装 openpyxl 库。可以使用以下命令在终端或命令提示符中安装&#xff1a; pip install openpyxl然后&#xff0c;可以按照以下步骤编写代码&#xff1a; 1.导入 openpyxl 库&…