反转数字而不使其成为 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 > 0
的 while
循环中意味着一旦数字精度失败,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));
谁能告诉我我的代码哪里出错了?我正在尝试反转数字而不将其更改为字符串。我一直在搜索 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 > 0
的 while
循环中意味着一旦数字精度失败,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));