由一道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;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值