dividend 和 divisor都是int 类型,返回值也是int类型,
在C++中,int类型表示整数类型,其范围取决于具体的实现。通常情况下,int类型的范围为-2147483648到2147483647,即-231到231-1。这是因为int类型通常为32位有符号整数。然而,具体的范围可能会因编译器、操作系统和硬件平台的不同而有所变化。为了确保跨平台的可移植性,可以使用标准库中的头文件中定义的常量来获取int类型的范围,例如INT_MIN和INT_MAX。
存在越界的问题在于, -2147483648/-1 = 2147483648 大于int的正整数边界。
class Solution {
public:
int divide(int dividend, int divisor) {
if(dividend == INT_MIN){
if(divisor == -1){
return INT_MAX;
}
}
return dividend/divisor;
}
};
leetcode 平台居然通过了,没有判断divisor==0的情况;
class Solution {
public:
int divide(int dividend, int divisor) {
if(dividend == INT_MIN){
if(divisor == -1){
return INT_MAX;
}
if(divisor == 1){
return INT_MIN;
}
}
if(divisor == INT_MIN){
if(dividend == INT_MIN){
return 1;
}else{
return 0;
}
}
if(divisor == 0){
return 0;
}
return dividend/divisor;
}
};
增加对INT_MIN/INT_MIN == 1的情况的判定,可以提高运行速度。
正数除以INT_MIN不会等于0。INT_MIN是一个负数,而正数除以负数会得到一个负数的结果。在C++中,当一个正数除以一个负数时,结果会向零取整,即取整数部分,而不是四舍五入。因此,正数除以INT_MIN的结果将是一个负数。