29. 两数相除
2022-01-09 本文已影响0人
名字是乱打的
一 题目:
二 思路:
采用二分法的思想,dividend每次减去2^n个divisor(尽可能多),同时reslut每次加2^n
三 代码:
class Solution {
public int divide(int dividend, int divisor) {
if (dividend==Integer.MIN_VALUE&&divisor==-1){
return Integer.MAX_VALUE;
}
//判断符号是否一致
//这里不能用两者的乘法做运算,因为可能会移除变负数;
boolean same= (dividend>0&&divisor>0||dividend<0&&divisor<0)?true:false;
// 将被除数和除数都转成正数或负数进行计算
// 由于在Java中,当t=Integer.MIN_VALUE时(t取相反数依旧是它本身)此时可能存在越界问题,因此都用负数进行计算
dividend=-Math.abs(dividend);
divisor=-Math.abs(divisor);
int res=0;
while (dividend<=divisor){
int temp=divisor;
//记录有多少个divisor
int count=1;
//dividend每次减去2^n个divisor(尽可能多),同时reslut每次加2^n
while (dividend-temp<=temp){
//temp*2,count*2;
temp=temp<<1;
count=count<<1;
}
//减去2的n次方个divisor
dividend=dividend-temp;
res=res+count;
}
return same? res:-res;
}
}