Reverse a number without making it a string in Javascript [duplicate]

a 夏天 提交于 2019-12-02 05:24:41

问题


Can anyone show me where I'm going wrong in my code please? I'm trying to reverse a number without changing it to a string. I've been searching google and looked through the previous questions asked about this topic and from what I can see my code mirrors the other answers.

I've only been able to find code in Java, C, or C++ that do not use the to string method.

In my attempts, when I run the code in the browser console it either gives me an answer of "Infinity" or crashes my browser.

Here's my code...

function reverseNumber(number) {

  var revNumber = 0;

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

  return revNumber;
}

console.log(reverseNumber(876));

I know it must be some small syntax error but I just don't see it. Any insight would be appreciated. Thanks!


回答1:


number = number / 10; inside a while loop whose condition is number > 0 means that number will only reach 0 after a very large number of iterations, once number precision fails. (eg. 876 => 87.6 => 8.76 => .876 => .0876...) That's not what you want. You might divide by 10 and drop the decimal part:

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:


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



回答3:


number = Math.floor(number / 10);

You need to Math.floor as number = number / 10; will give in floating points value which will always be greater than 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));



回答4:


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

El problema estaba en la reeasignación del valor del number, con el Math.floor sacamos la parte entera y solo esta, asi evitamos los decimales.




回答5:


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

Inline Basic implementation:

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

Implementation using arrays.

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


来源:https://stackoverflow.com/questions/51146294/reverse-a-number-without-making-it-a-string-in-javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!