我在leetcode上做了以下问题:https://leetcode.com/problems/divide-two-integers/
给出两个整数被除数和除数,将两个整数相除而不使用乘法,除法和mod运算符。
除以除数后的商。
整数除法应截断为零。
输入:股息= 10,除数= 3 输出3 示例2:
输入:除数= 7,除数= -3 输出:-2
注意:为此,我编写了以下代码,对于其中一个测试用例,我的时间已超出
var divide = function(dividend, divisor) {
let quoitent = 0
if (divisor === dividend) quoitent = 1
let negativeDevisor = divisor < 0 ? true : false
let negativeDevident = dividend < 0 ? true : false
if (negativeDevisor !== negativeDevident) {
if (negativeDevisor) {
let i = 0
while (divisor !== 0) {
divisor++
i++
}
divisor = i
} else if (negativeDevident) {
let i = 0
while (divisor !== 0) {
divisor--
i--
}
divisor = i
}
}
while (divisor<dividend) {
dividend = dividend - divisor
quoitent++
}
if ((negativeDevisor || negativeDevident) && (negativeDevisor !== negativeDevident)) {
let i = 0
while (quoitent !== 0) {
i--
quoitent--
}
quoitent = i
}
if (negativeDevisor && negativeDevident) {
while (divisor>dividend) {
dividend = dividend - divisor
quoitent++
}
}
return quoitent
};
console.log(divide(-2147483648, -1))
这是什么意思?
假设我们正在处理一个只能存储的环境 32位有符号整数范围内的整数:[− 231,231 − 1]。对于 为此问题的目的,假设您的函数返回231 − 1 当除法结果溢出时。
有人可以修复我的算法或编写有效的代码。在讨论部分,我看到许多人使用Math.abs,floor等,但我认为我们不允许使用它们吗?