| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | 
							- package main
 
- // add binary
 
- // func minInt(x, y int) int {
 
- // 	if x < y {
 
- // 		return x
 
- // 	}
 
- // 	return y
 
- // }
 
- const one, zero = byte('1'), byte('0')
 
- func add3Bi(x, y, z byte) (sum, remain byte) {
 
- 	switch x + y + z - 3*zero {
 
- 	case 0:
 
- 		return zero, zero
 
- 	case 1:
 
- 		return one, zero
 
- 	case 2:
 
- 		return zero, one
 
- 	case 3:
 
- 		return one, one
 
- 	default:
 
- 		return
 
- 	}
 
- }
 
- func reverseStr(s string) string {
 
- 	runes := []rune(s)
 
- 	for from, to := 0, len(s)-1; from < to; from, to = from+1, to-1 {
 
- 		runes[from], runes[to] = runes[to], runes[from]
 
- 	}
 
- 	return string(runes)
 
- }
 
- func addBinary(a string, b string) string {
 
- 	la, lb := len(a)-1, len(b)-1
 
- 	sum, remain := zero, zero
 
- 	res := make([]rune, 0)
 
- 	for i := 0; i <= minInt(la, lb); i++ {
 
- 		sum, remain = add3Bi(a[la-i], b[lb-i], remain)
 
- 		res = append(res, rune(sum))
 
- 	}
 
- 	lc := 0
 
- 	var c string
 
- 	if la < lb {
 
- 		c = b
 
- 		lc = lb
 
- 	} else {
 
- 		c = a
 
- 		lc = la
 
- 	}
 
- 	for i := minInt(la, lb) + 1; i <= lc; i++ {
 
- 		sum, remain = add3Bi(zero, c[lc-i], remain)
 
- 		res = append(res, rune(sum))
 
- 	}
 
- 	if remain == one {
 
- 		res = append(res, rune(one))
 
- 	}
 
- 	return reverseStr(string(res))
 
- }
 
 
  |