Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中反转整数_Javascript - Fatal编程技术网

在JavaScript中反转整数

在JavaScript中反转整数,javascript,Javascript,我已经编写了以下代码来反转JavaScript中的整数。它工作正常,但在输入-900000时返回0。有人知道会出什么问题吗 /** * @param {number} x * @return {number} */ var reverse = function(x) { var negative_number= false; var k; var new_string; if(x<0){ negative_number = true;

我已经编写了以下代码来反转JavaScript中的整数。它工作正常,但在输入-900000时返回0。有人知道会出什么问题吗

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    var negative_number= false;
    var k;
    var new_string;
    if(x<0){
        negative_number = true;
        x=Math.abs(x);
    }
    var n = x.toString(); // convert from number to string
        // Step 1. Use the split() method to return a new array
    var splitString = n.split(""); // var splitString = "hello".split("");
    // ["h", "e", "l", "l", "o"]
    if (negative_number)
    {
        for (var i=0; i< splitString.length-1; i++)
        {
            splitString[i]=splitString[i+1];
        }
    }
    // Step 2. Use the reverse() method to reverse the new created array
    var reverseArray = splitString.reverse(); // var reverseArray = ["h", "e", "l", "l", "o"].reverse();
    // ["o", "l", "l", "e", "h"]

    // Step 3. Use the join() method to join all elements of the array into a string
    var joinArray = reverseArray.join(""); // var joinArray = ["o", "l", "l", "e", "h"].join("");
    // "olleh"
    //return joinArray;
    var number = Number(joinArray);
    if (negative_number)
        number= -Math.abs(number);
    //Step 4. Return the reversed string
    return number;
};
/**
*@param{number}x
*@return{number}
*/
var反向=函数(x){
var负值=假;
var-k;
var新_字符串;

如果(x你不需要从负数中切掉
-
符号,你已经将绝对值取为
x
。去掉那个循环,它会移动数字并破坏你的值。

有一点很清楚,这比必要的要复杂得多。我认为这会满足你的要求:

const rev = (i) => Math.sign(i) * Number(('' + Math.abs(i)).split('').reverse().join(''))

看起来太复杂了。这应该足够了:

函数反向(n){
返回数字(Array.from(String(Math.abs(n))).reverse().join(“”))*数学符号(n);
}
控制台日志(反向(144));

log(反向(-90000));
一些优秀的答案已经发布

我决定展示一个稍微不同的变化:

  • 使用“递归”处理否定的情况
  • 函数的其余部分只关注积极的情况
  • 将每个中间计算分解为自己的行
下面是一段代码片段,带有注释,说明了
-123
如何变成
-321

功能反转(x){
if(x<0)返回-reverse(-x);//reverse(-123)==-reverse(123)
var str=x.toString();/“123”
var strArray=str.split(“”;//[“1”、“2”、“3”]
var revArray=strArray.reverse();//[“3”、“2”、“1”]
var rev=revArray.join(“”;/“321”
报税号码(修订版);
}
console.log(反向(-123));//输出:-321
console.log(反向(0));//输出:0

console.log(反向(-900000));//输出:-9
这是我在Leetcode上玩过之后的变体。 条件:

给定一个32位有符号整数,整数的倒数

假设我们正在处理一个只能存储 32位有符号整数范围内的整数:[−231, 231 − 1] .为了 这个问题的目的是,假设您的函数在 反向整数溢出

const reverse=函数(x){
const revInt=parseFloat(x.toString().split(“”).reverse().join(“”))*数学符号(x);
常量maxInt=(2**31)-1;
常数minInt=-(2**31);

return(revInt>=minInt&&revInt这个for循环的意义是什么?`for(var i=0;iabs
输入了你期望它是什么?谢谢Scott。我实际上来自PHP背景,不熟悉JavaScript。只是在解决问题的同时学习它。但是非常感谢,因为我必须在下一步处理这些解决方案的加载时间。我想我发现有人对该语言不熟悉。:-)我的观点与加载时间无关,也与您的解决方案的大小无关。相反,我只想指出,您手动执行的许多技术已经内置。来自@StephenQuan的解决方案实际上更有效地显示了这一点。我喜欢这里的递归。这使得它比其他解决方案的
Math.sign更干净版本。
const reverse = function(x) {
  const revInt = parseFloat(x.toString().split('').reverse().join('')) * Math.sign(x);
  const maxInt = (2 ** 31) - 1;
  const minInt = -(2 ** 31);
  return (revInt >= minInt && revInt <= maxInt) ? revInt : 0;
};