在Javascript中不将数字转换为字符串的情况下反转一个数字

5
有人能帮我找出代码中的错误吗?我尝试反转数字而不将其转换为字符串。我已经在Google上搜索过,并查看了关于此主题的先前问题,从我所看到的答案来看,我的代码与其他答案相似。但我只能找到Java、C或C++代码不使用to string方法。
我的尝试中,当我在浏览器控制台运行代码时,它要么给我一个"Infinity"的答案,要么使我的浏览器崩溃了。
以下是我的代码...

function reverseNumber(number) {

  var revNumber = 0;

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

  return revNumber;
}

console.log(reverseNumber(876));

我知道这一定是一个小的语法错误,但我就是找不出来。如果谁有任何见解,将不胜感激。谢谢!


你的意思是将数字变为负数?还是反转顺序? - Simeon Smith
正整数 n 数字翻转的公式 - Tushar
语法错误意味着您的浏览器控制台(开发工具)显示“SyntaxError”。你的错误是一个语义错误,而不是一个语法错误。 - Sebastian Simon
更改为 number = parseInt(number / 10); - user1531038
5个回答

20
number = Math.floor(number / 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));


2
如果数字以零结尾,则无法工作。例如:10 - Tushar
3
需要 OP 进一步澄清,但我认为例如 6780 -> 0876 === 876 - 所需的输出结果是一个数字而不是字符串,数字不能有前导零。(我想不出还有其他选项了...?) - CertainPerformance
太棒了!我之前没有意识到它的行为就像渐近线,但现在有道理了。感谢你的帮助! - smallDisgruntledDog
@Andres 这并没有太多意义。-321 不能变成 123-.. 除非你想先将其强制转换为字符串。 [...String(num)].reverse().join('') - CertainPerformance

2

These works.

Basic Implementation:

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))


你可以使用 Math.floor 代替 parseIntparseInt 是用于将字符串转换为数字的。 - Felix Kling
@FelixKling 感谢您指出。 - Vignesh Raja
在阅读使用parseInt的建议后,我的下一个问题是它们在使用上是否有所不同。今晚我学到了两件事。谢谢! - smallDisgruntledDog

0
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));


0

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可以得到整数部分,避免了小数。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接