// 题目2:输入两个表示二进制的字符串,计算他们的和并以二进制字符串的形式输出
// 例如,输入的“11”和“10”,输出:“101”
package main
import "fmt"
// 题目:输入两个表示二进制的字符串,计算他们的和并以二进制字符串的形式输出
// 例如,输入的“11”和“10”,输出:“101”
func addBinary(a, b string) string {
result := make([]byte, 0, 20)
i := len(a) - 1
j := len(b) - 1
var digitA, digitB, carry uint8
for i >= 0 || j >= 0 {
if i >= 0 {
digitA = a[i] - '0'
i -= 1
//go没有i-- 、 i++
} else {
digitA = 0
}
if j >= 0 {
digitB = b[j] - '0'
j -= 1
} else {
digitB = 0
}
sum := digitA + digitB + carry
if sum >= 2 {
carry = 1
sum -= 2
} else {
carry = 0
}
result = append(result, sum)
}
if carry == 1 {
result = append(result, 1)
}
res := ""
for i := len(result) - 1; i >= 0; i-- {
res += fmt.Sprintf("%d", result[i])
}
return res
}
func main() {
res := addBinary("101", "11")
fmt.Print(res)
}