【Go语言入门100题】009 N个数求和 (20 分) Go语言|Golang

简介: 简介: L1-009 N个数求和 (20 分)Go语言|Golang本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

看了这文章,我做练习却怎么也调不出来,后来用了chatgpt反复修改,最后得到了下面的结果。验证成功。
【Go语言入门100题】009 N个数求和 (20 分) Go语言|Golang-阿里云开发者社区
https://developer.aliyun.com/article/822842?spm=a2c6h.14164896.0.0.3c3947c5Psx3RG

package main



import (
    "fmt"
    "strconv"
    "strings"
)



func main() {
   
    var num int
    var str string

    // 首先读取分数的数量

    _, _ = fmt.Scan(&num)

    // 用于存储分子和分母的变量

    a, b := 0, 1

    // 循环读取并累加每个分数

    for i := 0; i < num; i++ {
   

        _, _ = fmt.Scan(&str)

        tmp := strings.Split(str, "/")

        c, _ := strconv.Atoi(tmp[0])

        d := 1

        if len(tmp) > 1 {
   

            d, _ = strconv.Atoi(tmp[1]) // 只有在切片长度大于1时才访问tmp[1]

        }

        gcd := div(b, d)          // 最大公约数

        lcm := b * d / gcd        // 最小公倍数

        a = a*(lcm/b) + c*(lcm/d) //通分后分子和

        b = lcm

        gcd = div(a, b) // 约简分数

        if gcd != 0 {
   

            a /= gcd

            b /= gcd

        }

    }



    // 输出最终的有理数和

    if a%b == 0 {
    // 如果可以整除则直接输出

        fmt.Println(a / b)

    } else if a > b {
    // 输出带分数

        fmt.Printf("%d %d/%d\n", a/b, a%b, b)

    } else {
    // 输出真分数

        fmt.Printf("%d/%d\n", a, b)

    }

}



func div(a, b int) int {
    // 最大公约数

    for b != 0 {
   

        a, b = b, a%b

    }

    return a

}
相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
11月前
|
Linux Go iOS开发
Go语言100个实战案例-进阶与部署篇:使用Go打包生成可执行文件
本文详解Go语言打包与跨平台编译技巧,涵盖`go build`命令、多平台构建、二进制优化及资源嵌入(embed),助你将项目编译为无依赖的独立可执行文件,轻松实现高效分发与部署。
1619 162
|
10月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
685 4
|
10月前
|
Cloud Native 安全 Java
Go语言深度解析:从入门到精通的完整指南
🌟蒋星熠Jaxonic,Go语言探索者。深耕云计算、微服务与并发编程,以代码为笔,在二进制星河中书写极客诗篇。分享Go核心原理、性能优化与实战架构,助力开发者掌握云原生时代利器。#Go语言 #并发编程 #性能优化
722 43
Go语言深度解析:从入门到精通的完整指南
|
10月前
|
Java 编译器 Go
【Golang】(1)Go的运行流程步骤与包的概念
初次上手Go语言!先来了解它的运行流程吧! 在Go中对包的概念又有怎样不同的见解呢?
456 4
|
10月前
|
Java 编译器 Go
【Golang】(5)Go基础的进阶知识!带你认识迭代器与类型以及声明并使用接口与泛型!
好烦好烦好烦!你是否还在为弄不懂Go中的泛型和接口而烦恼?是否还在苦恼思考迭代器的运行方式和意义?本篇文章将带你了解Go的接口与泛型,还有迭代器的使用,附送类型断言的解释
426 3
|
10月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
454 2
|
11月前
|
Cloud Native 安全 Java
Go语言深度解析:从入门到精通的完整指南
🌟 蒋星熠Jaxonic,执着的星际旅人,用Go语言编写代码诗篇。🚀 Go语言以简洁、高效、并发为核心,助力云计算与微服务革新。📚 本文详解Go语法、并发模型、性能优化与实战案例,助你掌握现代编程精髓。🌌 从goroutine到channel,从内存优化到高并发架构,全面解析Go的强大力量。🔧 实战构建高性能Web服务,展现Go在云原生时代的无限可能。✨ 附技术对比、最佳实践与生态全景,带你踏上Go语言的星辰征途。#Go语言 #并发编程 #云原生 #性能优化
|
存储 缓存 安全
Go 语言中的 Sync.Map 详解:并发安全的 Map 实现
`sync.Map` 是 Go 语言中用于并发安全操作的 Map 实现,适用于读多写少的场景。它通过两个底层 Map(`read` 和 `dirty`)实现读写分离,提供高效的读性能。主要方法包括 `Store`、`Load`、`Delete` 等。在大量写入时性能可能下降,需谨慎选择使用场景。
|
存储 负载均衡 监控
如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
在数字化时代,构建高可靠性服务架构至关重要。本文探讨了如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
594 1
|
Go 调度 开发者
探索Go语言中的并发模式:goroutine与channel
在本文中,我们将深入探讨Go语言中的核心并发特性——goroutine和channel。不同于传统的并发模型,Go语言的并发机制以其简洁性和高效性著称。本文将通过实际代码示例,展示如何利用goroutine实现轻量级的并发执行,以及如何通过channel安全地在goroutine之间传递数据。摘要部分将概述这些概念,并提示读者本文将提供哪些具体的技术洞见。

热门文章

最新文章

推荐镜像

更多