题目原话:不用乘除法实现两个数的除法
需要注意长度的问题,百度看了网上很多移位运算的解法,还是没有看懂。
来个简单粗暴的方法,将除数不停翻倍,比较除数与被除数的大小。
class Solution {
public int divide(int dividend, int divisor) {
boolean sign = (dividend < 0) ^ (divisor < 0);
long top = Math.abs((long) dividend);
long bottom = Math.abs((long) divisor);
if(dividend == 0) return 0;
if(bottom == 1) return (int)(sign ? 0-top : Math.min(top,Integer.MAX_VALUE));
int multer = 1;
long defer = bottom;
int result = 0;
while(top >= defer){
top -= defer;
result += multer;
defer += defer;
multer += multer;
if(top < defer){
defer = bottom;
multer = 1;
}
}
return sign ? 0-result : result;
}
}
最近笔试很多题都是暴利法不能全部AC的,需要优化,现在感觉这种题有点意思。
参考链接:https://leetcode.com/problems/divide-two-integers/discuss/124268/Java-Solution-No-Bit-Manipulation-or-Recursion