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
相关产品推荐
相关产品推荐

