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
}