二进制求和

93 阅读1分钟

image.png

代码 1 模拟:

  1. ans 答案字符串,可以直接加运算
  2. carry 储存当前值,carry 对 2 取余达到当前值, 除 2 得到其进位值
  3. strconv.Itoa使 int 转 字符串,然后直接加 ans 即可
  4. 最后,carry 如果大于 0 ,则在最后再加上一个 "1"
func addBinary(a string, b string) string {
    ans := ""
    carry := 0
    lenA, lenB := len(a), len(b)
    n := max(lenA, lenB)

    for i := 0; i < n; i++ {
        if i < lenA {
            carry += int(a[lenA-i-1] - '0')
        }
        if i < lenB {
            carry += int(b[lenB-i-1] - '0')
        }
        ans = strconv.Itoa(carry%2) + ans
        carry /= 2
    }
    if carry > 0 {
        ans = "1" + ans
    }
    return ans
}

func max(x, y int) int {
    if x > y {
        return x
    }
    return y
}