在Go(Golang)中不使用乘法或除法运算符的情况下除以两个整数的方法

355 阅读1分钟

概述

给出两个数字。目标是除以这些数字并返回商。忽略解决方案中的剩余部分。但是除法需要在不使用乘法或除法运算符的情况下进行。

  • 第一个数字是被除数

  • 第二个数字是除数

举例来说

Input: 15,2
Ouput: 7

Input: -15,2
Ouput: -7

Input: 15,-2
Ouput: -7

Input: -15,-2
Ouput: 7

下面是如何做的想法。首先要注意的是

  • 如果分红和除数都是正数或都是负数,那么商就是正数。

  • 如果分红和除数中的任何一个是负数,那么商就是负数。

因此,在分红和除数的符号之间存在一个XOR关系。我们可以按照以下步骤来编写程序

  • 首先,根据上面的XOR逻辑,确定商的符号。

  • 然后使红利和除数都为正数。

  • 现在通过自身增加除数,直到它小于或等于红利。同时,为每一个增量保留一个计数器

  • counter*sign将是答案

程序

以下是相同的程序。

package main

import (
	"fmt"
	"math"
)

func divide(dividend int, divisor int) int {

	sign := 1
	if dividend < 0 || divisor < 0 {
		sign = -1
	}

	if dividend < 0 && divisor < 0 {
		sign = 1
	}

	if dividend < 0 {
		dividend = -1 * dividend
	}

	if divisor < 0 {
		divisor = -1 * divisor
	}

	start := divisor

	i := 0

	for start <= dividend {
		start = start + divisor
		i++
	}

	output := i * sign

	return output
}

func main() {
	output := divide(15, 2)
	fmt.Println(output)

	output = divide(-15, 2)
	fmt.Println(output)

	output = divide(15, -2)
	fmt.Println(output)

	output = divide(-15, -2)
	fmt.Println(output)
}

输出

7
-7
-7
7