2020年3月15日 星期日

題目:如何用二進位來進行加法運算

這是在 line 群組上看到有人提到的題目。
就試著解看看。
使用的語言是 Go,以下是自己的解答:
package main

import (
	"fmt"
	"math"
)

func main() {
	a := 94
	b := 12341
	fmt.Println(addNumber(a, b))

	fmt.Println(a + b)

}
func addNumber(a, b int) int {
	sum := 0
	addTemp := 0

	atLeastLoop := int(math.Max(
		math.Log2(float64(a)),
		math.Log2(float64(b)),
	))

	for i := 0; ; i++ {
		powNum := 1 << i

		aPow := a & powNum
		bPow := b & powNum

		if addTemp == 0 && aPow == 0 && bPow == 0 && i >= atLeastLoop {
			break
		}
		if addTemp == 0 {
			if (aPow & bPow) == powNum {
				addTemp = 1 << (i + 1)
			} else if (aPow | bPow) == powNum {
				addTemp = 0
				sum = sum | powNum
			}

			continue
		} else {
			if (aPow & bPow) == powNum {
				addTemp = 1 << (i + 1)
				sum = sum | powNum
			} else if (aPow | bPow) == powNum {
				addTemp = 1 << (i + 1)

			} else {
				addTemp = 0
				sum = sum | powNum
			}

		}
	}
	return sum
}
Go Playground 連結:https://play.golang.org/p/T7ip7-xRH7x

沒有留言:

張貼留言