- 两数相除
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
来源:力扣(LeetCode)
以下是暴力解法,优化可以考虑二分查找法或者移位运算符
public static int divide(int dividend, int divisor) {
if(dividend==0)return 0;
if(dividend==divisor)return 1;
boolean flag=!(dividend>0)^(divisor>0);
if(dividend>0)dividend=-dividend;
if(divisor>0)divisor=-divisor;
if(divisor==-1) {
long m=0;
if(dividend==-2147483648&&flag)m=2147483647;
else m=-dividend;
if(!flag)return (int)-m;
return (int)m;
}
int n=0;
while(dividend-divisor<=0) {
dividend-=divisor;
n++;
if(n==2147483647)break;
}
if(!flag)return -n;
return n;
}