package main
import "fmt"
func main() {
a := "10"
b := "1"
result := addBinary(a,b)
fmt.Println(result)
}
/**
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0
*/
func addBinary(a string,b string) string {
// 比较两个字符的长短,保证第一个字符长度不小于第二个字符的
la := len(a)
lb := len(b)
// 如果b字符长度大于a字符的,调换他们
if lb > la {
tmp := a
a = b
b = tmp
la = len(a)
lb = len(b)
}
// 调整后,如果 a字符长度大于b字符串长度,就把b字符长度补齐到一样,前面加0,使a,b字符长度
if la > lb {
for i := la - lb; i > 0; i-- {
b = "0" + b
}
}
plus := 0
res := ""
// 循环相加
for i := la - 1; i != -1; i-- {
// 转换为int型相加,会转为对应的ascii码相加
ans := int(a[i]) + int(b[i]) + plus
// 1对应的ascii码为49,1+1对应的ascii的码为98
if ans >= 98 {
// 相当于 string(ans-50) 2的ascii码为 50,转为字符型,进一位
res = string(ans-'2') + res
plus = 1
} else {
// 相当于 string(ans-48) 0的ascii码为 48,转为字符型
res = string(ans-'0') + res
plus = 0
}
}
// 进一位需要在前面加1,注意这个是字符型
if plus == 1 {
res = "1" + res
}
return res
}