刷题7-整数除法
专项第一题-简单
思路:
不能用乘除,但可以用加减
另外还要注意,任何正数转化为整数都不会溢出,所以先都转化为负数
然后判断一个特殊会溢出的情况
(-2^31)/(-1)=2^31-1
核心代码:
class Solution {
public int divide(int a,int b){
int sum=0;
if(a==0) return 0;
if(a==Integer.MIN_VALUE&&(b==-1)){//考虑特殊情况,最小的数-2^31(MIN_VALUE)/(-1)本来应该等于2^31
return Integer.MAX_VALUE;//但是整数中最大的数为2^31-1(MAX_VALUE)
}
int flag=(a>0)^(b>0)?-1:1;//^为异或运算
if(a>0) a=-a;//将任意的整数转换成负数都不会溢出
if(b>0) b=-b;
while(a<=b){
a=a-b;
sum++;
}
sum=(flag==1)?sum:(-sum);//确定商的符号
return sum;
}
}
在这个代码片中注意:
1.java中的异或运算^
2.Integer.MIN_VALUE=-2^31
3. Integer.MAX_VALUE=2^31-1