反转数字而不使其成为 Javascript 中的字符串

Reverse a number without making it a string in Javascript

谁能告诉我我的代码哪里出错了?我正在尝试反转数字而不将其更改为字符串。我一直在搜索 google 并查看了之前关于此主题的问题,从我可以看到我的代码反映了其他答案。

我只能在 Java、C 或 C++ 中找到不使用字符串方法的代码。

在我的尝试中,当我 运行 浏览器控制台中的代码时,它要么给我一个 "Infinity" 的答案,要么使我的浏览器崩溃。

这是我的代码...

function reverseNumber(number) {

  var revNumber = 0;

  while (number > 0) {
    revNumber = (revNumber * 10) + (number % 10);
    number = number / 10;
  }

  return revNumber;
}

console.log(reverseNumber(876));

我知道这一定是一些小的语法错误,但我就是没看到。任何见解将不胜感激。谢谢!

number = number / 10; 在条件为 number > 0while 循环中意味着一旦数字精度失败,number 只会在大量迭代后达到 0。 (例如 876 => 87.6 => 8.76 => .876 => .0876...)这不是您想要的。您可以除以 10 并且 去掉小数部分:

function reverseNumber(number) {
  var revNumber = 0;
  while (number > 0) {
    revNumber = (revNumber * 10) + (number % 10);
    number = Math.floor(number / 10);
  }
  return revNumber;
}
console.log(reverseNumber(876));

number = Math.floor(number / 10);

您需要 Math.floor 为 number = number / 10;将给出始终大于 0

的浮点值

   function reverseNumber(number) {

          var revNumber = 0;

          console.log("######### steps ###########");

          while (number > 0) {
            console.log("Step " , number);
            revNumber = (revNumber * 10) + (number % 10);
            number = Math.floor(number / 10);
          }
            console.log("######### steps End ###########");

          return revNumber;
        }

        console.log(reverseNumber(876));

这些作品。

基本实现:

function reverse(n)
{
    var temp=0;
    while(n)
    {
        temp *= 10;
        temp += n%10;
        n = Math.floor(n/10);
    }
    return temp;
}

console.log(reverse(123))
console.log(reverse(456))
console.log(reverse(789))
console.log(reverse(7890))

内联基本实现:

function reverse(n)
{
    var reverse=0;
    while(n>0) (reverse=reverse*10+n%10, n=Math.floor(n/10));
    return reverse;
}

console.log(reverse(123))
console.log(reverse(456))
console.log(reverse(789))
console.log(reverse(7890))

使用数组实现。

function reverse(n)
{
    var arr=[], reverse=0;
    while(n>0) (arr.push(n%10), n=Math.floor(n/10));
    while(arr.length) reverse=reverse*10+arr.shift();
    return reverse;
}

console.log(reverse(123))
console.log(reverse(456))
console.log(reverse(789))
console.log(reverse(7890))

function reverseNumber(number) {

  var revNumber = 0;

  while (number > 0) {
    revNumber = (revNumber * 10) + (number % 10);
    number = Math.floor(number / 10);
  }

  return revNumber;
}

console.log(reverseNumber(876));

问题出在数字值的重新分配上,Math.floor我们去掉了整数部分,只有这个,所以我们避免了小数。

function reverseInt(int) {
  return  parseInt(int.toString().split('').reverse().join(''))
}
console.log(reverseInt(510));