概述
给出两个数字。目标是除以这些数字并返回商。忽略解决方案中的剩余部分。但是除法需要在不使用乘法或除法运算符的情况下进行。
-
第一个数字是被除数
-
第二个数字是除数
举例来说
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