You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang如何实现两个数组对应位逐位累加并处理十进制进位

Golang实现两数组按十进制进位规则逐位累加

问题说明

需要对两个整数数组,按对应索引位置逐位做十进制加法,遵循满10进1的进位规则,最终返回累加后的结果数组,规则匹配如下示例:

  • 示例1

    输入:[3, 8, 1]、[3, 2, 5]
    输出:[6, 0, 7]

  • 示例2

    输入:[7, 6, 7]、[2, 5, 6]
    输出:[9, 1, 4, 1]

原有代码问题

之前编写的代码逻辑是单个数组所有元素直接求和得到总数值,没有实现双数组对应位取值、逐位计算、十进制进位处理、最终进位补位的逻辑,无法满足需求。

实现思路

  • 初始化进位变量carry为0,从索引0开始逐位遍历
  • 每一位求和时,若索引超过数组长度,对应位的取值按0计算
  • 每一位的计算结果为(a[i] + b[i] + carry) % 10,新的进位值为(a[i] + b[i] + carry) / 10
  • 当两个数组都遍历完成、且进位值为0时,停止计算
  • 逐位计算得到的结果按顺序存入结果切片即可,无需额外反转

完整实现代码

package main

import "fmt"

// addArrays 实现两个数组按十进制进位逐位累加
func addArrays(a, b []int) []int {
	var res []int
	carry := 0
	i := 0
	// 只要还有数组没遍历完,或者还有进位,就继续计算
	for i < len(a) || i < len(b) || carry > 0 {
		sum := carry
		// 取第一个数组当前位的值,越界则取0
		if i < len(a) {
			sum += a[i]
		}
		// 取第二个数组当前位的值,越界则取0
		if i < len(b) {
			sum += b[i]
		}
		// 计算当前位结果和新的进位
		res = append(res, sum%10)
		carry = sum / 10
		i++
	}
	return res
}

func main() {
	// 测试示例1
	a1 := []int{3, 8, 1}
	b1 := []int{3, 2, 5}
	fmt.Println("示例1输出:", addArrays(a1, b1))

	// 测试示例2
	a2 := []int{7, 6, 7}
	b2 := []int{2, 5, 6}
	fmt.Println("示例2输出:", addArrays(a2, b2))
}

运行验证

把代码保存为main.go,执行命令go run main.go,即可得到和示例完全一致的输出:

示例1输出: [6 0 7]
示例2输出: [9 1 4 1]

内容的提问来源于stack exchange,提问作者dimas tatag anditya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 21:33:29