立扣题:给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
分析:
1.反转后符合[−2^31, 2^31 − 1]之间的范围。
2.当有-号时也可以正确返回。
⊰直接上代码
let x = 1534236469;
function reverse(x) {
let zero = String(x)[0]; //先去除第一位,后面判断是否是负号
let num = 0;
if (isNaN(zero)) { //判断zero
//如果是负数
//先转字符串,split转数组,截取掉第一位负号,反转在转成字符串
num = String(x).split('').splice(1).reverse().join('');
//判断是否是32位之内的数,不是返回0
if (-Math.pow(2, 31) <= Number(num) && Number(num) <= Math.pow(2, 31)) {
num = -num
} else {
num = 0
}
} else {
//同理
num = String(x).split('').reverse().join('');
if (-Math.pow(2, 31) <= Number(num) && Number(num) <= Math.pow(2, 31)) {
num = Number(num)
} else {
num = 0
}
}
return num
};
console.log(reverse(x)); // 0
以上代码较为复杂,可能在操作上有失误,也不便于修改代码。
下面提供一个进阶版本↓
let x = 123;
function reverse(x){
let num = 0
let zero = String(x)[0]
x = zero == '-' ? Number(String(x).split('').splice(1).join('')) : x ; //判断第一位是否是负号
while(x != 0){ //while循环
let cur = x % 10; //每次%10求余数,可得到最后一位数
x = Math.floor(x / 10) ; //取整!!!
num = Math.floor(num * 10 + cur); //每次num * 10
if (-Math.pow(2, 31) >= num || num >= Math.pow(2, 31)) { //判断是否是32位数
return 0
}
}
if (zero == '-') {
return -num
}else{
return num
}
}
console.log(reverse(x)); //321
如果有更简便的方法,可以留言,感谢!!!