题目介绍
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商(忽略小数部分)。
示例1:
dividend:11 divisor:3
result:3
示例2:
dividend:7 divisor:-2
result:3
思路
①由于运算符受限制,第一时间想到的是循环做加减法,这也是乘除法的本质所在
②用加减法代替乘除法需要考虑除数和被除数的正负问题,
我给出的解决方案是分类讨论,第一类是同号,第二类是异号,用一个结果计数器从0开始根据循环次数来计算商
③对于同号,每一次循环都把被除数减去除数得到的结果赋值给被除数,循环次数加1,商加1,只要被除数的绝对值大于等于被除数的绝对值,说明可以继续减,则循环继续,直到条件不满足
例如:11÷3向下取整相当于计算11-3-3-3-2中有多少个-3
当减了三次3之后所得的被除数是1,由于1的绝对值小于3的绝对值,所以循环终止,商为3
④对于异号,每一次循环都把被除数加上除数得到的结果赋值给被除数,循环次数加一,商减1(由于是异号,所得的商必须是负数),只要被除数的绝对值大于等于除数的绝对值,循环都继续进行
代码实现
class Solution {
public int divide(int dividend, int divisor) {
int result=0;
while(Math.abs(dividend)>=Math.abs(divisor)){
if((dividend>0&&divisor>0)||(dividend<0&&divisor<0)){
dividend-=divisor;
result++;
}else{
dividend+=divisor;
result--;
}
}
return result;
}
}