67. 二进制求和

image.png

  1. package main
  2. import "fmt"
  3. func addBinary(a string, b string) string {
  4. var aList []byte
  5. for i:=len(a)-1;i>=0;i--{
  6. aList = append(aList,a[i])
  7. }
  8. var bList []byte
  9. for i:=len(b)-1;i>=0;i--{
  10. bList = append(bList,b[i])
  11. }
  12. var i,j,av,bv,res,carry int
  13. var resList []int
  14. for i<len(aList)||j<len(bList){
  15. av =0
  16. if i<len(aList){
  17. av =int(aList[i]-'0')
  18. i++
  19. }
  20. bv =0
  21. if j<len(bList){
  22. bv =int(bList[j]-'0')
  23. j++
  24. }
  25. res = av+bv+carry
  26. carry =res/2
  27. res = res%2
  28. resList =append(resList,res)
  29. }
  30. if carry==1 {
  31. resList =append(resList,carry)
  32. }
  33. var s string
  34. for i =0;i<len(resList);i++{
  35. s =fmt.Sprintf("%d%s",resList[i],s)
  36. }
  37. return s
  38. }
  39. func main() {
  40. fmt.Println(addBinary("11","1"))//100
  41. fmt.Println(addBinary("1010","1011"))//10101
  42. fmt.Println(addBinary("1111","1111"))//10101
  43. }

image.png

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func addBinary(a string, b string) string {
  6. i := len(a)-1
  7. j := len(b)-1
  8. var av ,bv ,carry int
  9. var res string
  10. for i>=0||j>=0{
  11. if i>=0{
  12. av =int(a[i]-'0')
  13. i--
  14. }else {
  15. av =0
  16. }
  17. if j>=0{
  18. bv =int(b[j]-'0')
  19. j--
  20. }else {
  21. bv =0
  22. }
  23. r := av+bv+carry
  24. carry =r/2
  25. r = r%2
  26. res =fmt.Sprintf("%d%s",r,res)
  27. }
  28. if carry==1 {
  29. res =fmt.Sprintf("%d%s",carry,res)
  30. }
  31. return res
  32. }
  33. func main() {
  34. fmt.Println(addBinary("11","1"))//100
  35. fmt.Println(addBinary("1010","1011"))//10101
  36. fmt.Println(addBinary("1111","1111"))//10101
  37. }

image.png