0

0

如何在 Go 中将整数切片拼接为单个整数

碧海醫心

碧海醫心

发布时间:2026-03-15 20:31:13

|

797人浏览过

|

来源于php中文网

原创

本文详解在 Go 语言中将含非负整数的切片(如 [5, 5, 5])高效拼接为一个整数(如 555)的两种实现方式:基础版适用于单数字元素,增强版支持多位数(如 [1, 23, 456]),并强调溢出防护与边界处理。

本文详解在 go 语言中将含非负整数的切片(如 `[5, 5, 5]`)高效拼接为一个整数(如 `555`)的两种实现方式:基础版适用于单数字元素,增强版支持多位数(如 `[1, 23, 456]`),并强调溢出防护与边界处理。

在 Go 中,将整数切片(如 []int{5, 5, 5})拼接成一个十进制整数(如 555),本质是按位权累加运算:每轮将当前结果左移(×10),再加入下一个数字。这不是字符串拼接后转整型的间接方案,而是纯数值计算,性能更优、内存更省,也更符合 Go 的“显式即安全”哲学。

✅ 基础方案:仅适用于单数字元素(0–9)

当切片中每个元素均为 0–9 的个位数时,可直接使用固定进制位移:

s := []int{5, 5, 5}
n := 0
for _, digit := range s {
    n = n*10 + digit
}
fmt.Println(n) // 输出:555

该逻辑等价于:
0 → 0×10+5 = 5 → 5×10+5 = 55 → 55×10+5 = 555

⚠️ 注意:此方法不验证输入合法性。若传入 12 或 -3,结果将不符合“字符串拼接直觉”(例如 [1, 12] 得到 1×10+12 = 22,而非预期的 112)。因此仅推荐用于已知约束场景(如 BCD 编码、骰子点数数组等)。

B12
B12

B12是一个由AI驱动的一体化网站建设平台

下载

✅ 增强方案:支持任意非负整数(含多位数)

要正确处理 [1, 23, 456] → 123456,需动态计算每个数字的十进制位宽(即 10^k),再执行 n = n × shift + sn:

func concatInts(nums []int) (int, error) {
    if len(nums) == 0 {
        return 0, nil // 或返回 error,依业务而定
    }

    n := 0
    for _, sn := range nums {
        if sn < 0 {
            return 0, fmt.Errorf("negative number not supported: %d", sn)
        }

        // 计算 sn 的位数对应的进制偏移量:1→10, 23→100, 456→1000
        shift := 10
        for shift <= sn {
            shift *= 10
        }

        // 检查乘法是否可能溢出(Go 不自动检测,需手动防护)
        if n > (math.MaxInt64-shift)/10 {
            return 0, fmt.Errorf("integer overflow detected during concatenation")
        }

        n = n*shift + sn
    }
    return n, nil
}

// 使用示例
result, err := concatInts([]int{1, 23, 456})
if err != nil {
    log.Fatal(err)
}
fmt.Println(result) // 输出:123456

✅ 关键设计说明:

  • shift 通过循环快速定位最小的 10^k > sn(如 sn=456 → shift=1000);
  • 溢出检查采用保守预判:确保 n * shift 不超过 math.MaxInt64,避免运行时 panic;
  • 显式错误处理,拒绝负数输入——因负号无法无歧义地融入拼接逻辑([-1, 2] 应为 -12?1-2?不明确)。

? 总结与建议

场景 推荐方案 理由
已知全为 0–9 的整数(如密码数字、坐标分量) 基础循环 简洁、零分配、极致高效
输入来源不可控,或含多位数 增强版 concatInts 正确性优先,带校验与溢出防护
需要兼容负数或特殊格式(如带前导零) 改用字符串拼接 strconv 更安全直观:
s := strings.ReplaceAll(fmt.Sprint(nums), " ", "") → strconv.Atoi

最后提醒:Go 中 int 类型宽度依赖平台(通常为 64 位),但拼接结果极易超出 int64 范围(例如 20 个 9 拼接 ≈ 10²⁰ > 2⁶³)。生产环境强烈建议使用 int64 显式声明,并配合 math.MaxInt64 边界检查;对超大数需求,应切换至 big.Int。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

211

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

247

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

356

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

214

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

410

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

510

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

201

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

1519

2025.06.17

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

69

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 6.3万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号