给定两个整数,被除数dividend和除数divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数dividend除以除数divisor得到的商。
示例 1:
输入:dividend = 10, divisor = 3输出:3
示例 2:
输入:dividend = 7, divisor = -3输出:-2
说明:
被除数和除数均为 32 位有符号整数。
除数不为 0。
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。
public class Test07 {
public static int divide(int dividend,int divisor){
if(dividend == 0 ){
return 0;
}
if(dividend == Integer.MIN_VALUE && divisor ==-1){
return Integer.MAX_VALUE;
}
boolean negative;
negative = (dividend ^ divisor) < 0;
long t = Math.abs((long)dividend);
long d = Math.abs((long)divisor);
int result = 0;
for(int i = 31;i>=0;i--){
if((t>>i)>=d){//十进制t右移2的i次方(二进制右移i位)
result+=1<<i;//左移2的i次方
t-=d<<i;//左移2的i次方
}
}
return negative?-result:result;
}
public static void main(String[] args){
int i = 568;
int y = 3;
System.out.println(divide(i,y));
}
}