28 lines
527 B
Go
28 lines
527 B
Go
package q67
|
|
|
|
func toDigit(byt byte) uint8 { return byt - '0' }
|
|
func toByte(digit uint8) byte { return '0' + digit }
|
|
|
|
func addBinary(a string, b string) string {
|
|
lenA, lenB := len(a), len(b)
|
|
ret := make([]byte, max(lenA, lenB)+1)
|
|
var carry uint8
|
|
for i := range ret {
|
|
d := carry
|
|
if i < lenA {
|
|
d += toDigit(a[lenA-i-1])
|
|
}
|
|
if i < lenB {
|
|
d += toDigit(b[lenB-i-1])
|
|
}
|
|
carry = d / 2
|
|
ret[len(ret)-i-1] = toByte(d % 2)
|
|
}
|
|
|
|
if ret[0] != '1' {
|
|
return string(ret[1:])
|
|
}
|
|
return string(ret)
|
|
}
|
|
|
|
var _ = addBinary
|