题目:
这道题目,表面上很简单,实际上却给我挖了个大坑
问题在什么地方呢?
就是他的特殊情况的判定
由于题目要求,我们的环境只能存储32位有符号整数,也就是说我们不能使用long型,只能用int型,因此而可能引发一系列的错误
先上代码:
class Solution {
public int divide(int dividend, int divisor) {
//特殊情况只会在dividend==Integer.MIN_VALUE时出现
if(dividend==Integer.MIN_VALUE){
if(divisor==1) return Integer.MIN_VALUE;
if(divisor==-1) return Integer.MAX_VALUE;
}
int flag=-1;
if((dividend>0 && divisor>0) || (dividend<0 && divisor<0)) flag=1;
//这里将两个数都转换为负数是为什么呢?
//因为负数的空间比整数的大1,可以避免很多可能超出范围的情况
dividend=-Math.abs(dividend);
divisor=-Math.abs(divisor);
int res=0;
while(dividend<0){
dividend-=divisor;
if(dividend>0) break;
res++;
}
return res*flag;
}
}
运行结果也是极其低下
如果大佬们有更优秀的方法的话,欢迎交流
我先在角落画画圆圈