由一道leetcode的简单题引发的问题

下面是leetcode上的一道简单题

题目的内容就是输入-2^31 —2^31-1的数字,求出它的逆序数,逆序数溢出就返回0

算法的思路比较简单,就是用输入的数,不断的除10取余数,然后将商作为被除数,z一直进行下去,直到商为0.
但是其中需要注意的点很多,这里只是针对用js写代码的情况,js中的除法是没有整除这一说法的,它并不像C/C++那样

  c/c++中的(/)

如果整型正数相除得到的是整型(商向下取整)就比如4/3 = 1
如果整型正数相除得到的是整型(商向上取整)及比如 -4/3 = -1
这里一定注意正数和负数的取整方式是不同的。原理是很好理解的。

 js中(/)

js除法会保留小数部分,它会自动的判断结果是小数还是正数,不会对结果进行取舍,
这里就必须要用到js的函数Math.ceil()向上取整函数和Math.floor()向下取整函数

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    
    
    //除十取余法
    //需要注意如果是负数就需要s向上取整,正数是 向下取整
    var yushu = 0,shang = x;
    var number = 0;
    do{
    
    
        yushu = shang%10;
        if(shang>0) shang = Math.floor(shang/10);
        else shang = Math.ceil(shang/10);
        number = number*10+yushu;
    }while(shang!=0)
    //设置超出-2^31和2^31-1之间就返回0
    if(number>=2147483647||number<=-2147483648) return 0;
    return number;
};

猜你喜欢

转载自blog.csdn.net/qq_44606064/article/details/108920023
今日推荐