主体思路
- 使用数组,以倒序存要相加的数
例如,123 $\rightarrow$ [3, 2, 1] - 模拟加法的过程
注意细节
本加法函数,需要数A的位数多过数B,因此在正式运算之前,会比较两数的长度,调换。
基础代码
package main
import (
"fmt"
"os"
"bufio"
)
var (
out = bufio.NewWriter(os.Stdout)
in = bufio.NewReader(os.Stdin)
arrA, arrB []int
a, b string
)
func add(a, b []int) (c []int) {
// 保证数A的长度大于数B
if len(a) < len(b) {return add(b, a)}
// 进位标识
t := 0
for i := 0; i < len(a); i++ {
t += a[i]
if i < len(b) {t += b[i]}
// 假设t = 13, 那么进1,剩3(t % 10 = 3)
c = append(c, t % 10)
// 进位
t /= 10
}
// 进了位,还有剩下的
if t > 0 {c = append(c, t)}
return
}
func main() {
defer out.Flush()
fmt.Fscan(in, &a, &b)
// string -> []int
for i := len(a) - 1; i >= 0; i-- {arrA = append(arrA, int(a[i] - '0'))}
// string -> []int
for i := len(b) - 1; i >= 0; i-- {arrB = append(arrB, int(b[i] - '0'))}
c := add(arrA, arrB)
for i := len(c) - 1; i >= 0; i-- {fmt.Fprint(out, c[i])}
}