在Go(Golang)中添加两个二进制数字的程序

137 阅读1分钟

概述

我们的目标是将两个给定的二进制数字相加。二进制数只由数字0和1组成,以下是各个数字的二进制加法逻辑

  • 0+0 = 总和为0,进位为0

  • 0+1 = 总和为1,进位为0

  • 1+0 = 总和为0, 进位为0

  • 1+1 = 总和为0, 进位为1

  • 1+1+1 = 总和为1,进位为1

例子

Input: "101" + "11"
Output: "1000"

Input: "111" + "101"
Output: "1100"

程序

package main

import (
	"fmt"
	"strconv"
)

func addBinary(a string, b string) string {
	lenA := len(a)
	lenB := len(b)

	i := lenA - 1
	j := lenB - 1

	var output string
	var sum int
	carry := 0
	for i >= 0 && j >= 0 {
		first := int(a[i] - '0')
		second := int(b[j] - '0')

		sum, carry = binarySum(first, second, carry)

		output = strconv.Itoa(sum) + output
		i = i - 1
		j = j - 1
	}

	for i >= 0 {
		first := int(a[i] - '0')

		sum, carry = binarySum(first, 0, carry)

		output = strconv.Itoa(sum) + output
		i = i - 1

	}

	for j >= 0 {
		second := int(b[j] - '0')

		sum, carry = binarySum(0, second, carry)

		output = strconv.Itoa(sum) + output
		j = j - 1
	}

	if carry > 0 {
		output = strconv.Itoa(1) + output
	}

	return output
}

func binarySum(a, b, carry int) (int, int) {
	output := a + b + carry

	if output == 0 {
		return 0, 0
	}

	if output == 1 {
		return 1, 0
	}

	if output == 2 {
		return 0, 1
	}

	if output == 3 {
		return 1, 1
	}

	return 0, 0
}

func main() {
	output := addBinary("101", "11")
	fmt.Println(output)

	output = addBinary("111", "101")
	fmt.Println(output)
}

输出

1000
1100