leetcode 29

leetcode 29_第1张图片
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的结果将是一个负数。

你可能感兴趣的:(c++,leetcode)