在 Javascript 中反转一个数字而不使其成为字符串



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

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

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

这是我的代码...

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

这些作品。

基本实现

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

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

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

最新更新