2011-06-15 49 views
9

如何使用逐位反轉數字的數字?javascript中的反向小數位數

輸入:

x = 123; 

輸出:

x = 321; 

如何做到這一點?

+4

你的意思是反轉位或反向的字符串?反轉位表示將1更改爲0,反之亦然(以二進制值形式)。 – 2011-06-15 00:49:54

+1

您的意思是「反轉小數位」,而不是「反轉位」...... – 2011-06-15 00:50:32

+0

您對「位」的含義是什麼,顯然您並不是指位。 – 2011-06-15 00:51:08

回答

11

如果你想作一個簡單的逆轉:

var x = 123; 
var y = x.toString(); 
var z = y.split("").reverse().join(""); 
var aa = Number(z); 
document.write(aa); 

http://jsfiddle.net/jasongennaro/gV39e/

+2

那麼1000和1會換成相同的數字? – kennebec 2011-06-15 02:39:15

+0

好點,@kennebc。我應該把它放在'var z',作爲'string',但我又轉換回#。沒有預料到1000. @alex有上述解決方案。 – 2011-06-15 03:35:42

+0

這可能會失敗。例如,如果輸入導致溢出,如果您反轉它會發生什麼? – Christian 2015-05-11 09:16:29

14

這不是反轉位;這是扭轉十進制數字的順序,這是完全不同的。這裏有一種方法(最有效的,我相信):

var x = 123; 
var y = 0; 
for(; x; x = Math.floor(x/10)) { 
    y *= 10; 
    y += x % 10; 
} 
x = y; 

如果你真的要反轉位,它是:

x = ~x; 

作爲一個功能:

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

通常當這個問題出現時(幾乎總是在採訪中),他們希望你以這種方式回答而不將數字轉換爲字符串 – 2014-01-20 22:59:34

+0

這對小數不起作用。 – 2015-03-04 01:41:02

+0

@QuentinEngles:人們大多需要用整數來做到這一點。一些小數部分可能會更好地完成(甚至可能更好),作爲一個字符串。 – Ryan 2015-03-04 17:56:46

4

這裏是另一個方式...

var reversed = num.toString().split('').reverse().join(''); 

jsFiddle

如果您想再次將它作爲Number,請使用parseInt(reversed, 10)。請注意,領先的0 s在十進制數中並不重要,如果轉換爲Number,則會丟失它們。

0

下面是在JavaScript可逆陣函數處理整數或字符串:

function reverse(array) 
{ 
    var left = null; 
    var right = null; 
    var length = array.length; 
    for (left = 0, right = length - 1; left < right; left += 1, right -= 1) 
    { 
     var temporary = array[left]; 
     array[left] = array[right]; 
     array[right] = temporary; 
    } 
    return array; 
} 

function toDigitsArrayFromInteger(integer, isReverse) 
{ 
    var digits = []; 

    if (integer > 0) 
    { 
     var floor = window.Math.floor; 
     while (integer > 0) 
     { 
      digits.push(floor(integer % 10)); 
      integer = floor(integer/10); 
     } 

     // Array is populated in reverse order. Un-reverse it to make it normal. 
     if (!isReverse) 
     { 
      digits = reverse(digits); 
     } 
    } 
    else if (integer < 0) 
    { 
     digits = toDigitsArrayFromInteger(-integer, isReverse); 
    } 
    else if (integer === 0) 
    { 
     digits.push(0); 
    } 

    return digits; 
} 

function toDigitsArrayFromString(string, isReverse) 
{ 
    var digits = []; 

    string += ""; // Coerce to string. 

    var i = null; 
    var length = string.length; 
    for (i = 0; i < length; i += 1) 
    { 
     var integer = parseInt(string.charAt(i), 10); 
     if (isFinite(integer)) 
     { 
      digits.push(integer); 
     } 
    } 

    if (isReverse) 
    { 
     digits = reverse(digits); 
    } 

    return digits; 
} 

一旦你的數字作爲一個數組,您可以輕鬆地反轉數組以獲取從左側或右側開始的數字。

字符串函數更通用,因爲它可以找到字符串中的任何數字,而整數函數僅限於整數。

基準: http://jsperf.com/todigitsarray

兩個功能之間的基準測試表明在Firefox 10和鉻12,字符串函數比整數函數快30%至60%。在Opera 12中,整數函數略快10%左右。

-1

代碼塊下面應該做的伎倆

<script type = "text/javascript"> 

var input; 

input=window.prompt ("Please enter a number to be reversed."); 
x=input.length; 

while(x > 0) 
{ 

x=x-1; 
document.write(input[x]); 

} 

</script> 
0
<html> 
<script> 

function reverseInt(n){ 

     var r=0; 
    while(n!=0){ 
     r*=10; 
     r+=n%10; 
     n=Math.floor(n/10); 
} 
return r; 
} 


</script> 
</html> 
+1

你可以添加一些解釋嗎? – Undo 2014-02-19 03:52:46

2

也使用此功能

function myfunction(a){ 
    var x=a.toString(); 
    var y= x.split(""); 
    var z=y.reverse(); 
    var result=z.join(""); 
    return result; 

} myfunction的(123);

0

試試這個

var n = 352; 
function loop(n, r){ 
    if(!n) return r; 
    r = (r ? r * 10 : 0) + n % 10; 
    return loop(Math.floor(n/10), r); 
} 
console.log(loop(n)); 
2

簡單快捷的解決方案:讓我們假設你想扭轉一些4546.您將通過10通過各個部門的提醒,並把它添加到結果,直到數是> 0,同時通過10

var x = ''; 
var num = 4546; 
while(num>0){ 
x = x + (num%10); 
num = parseInt(num/10); 
} 
console.log(x); 
0

OK,通過將它更新num變量如何如何使用和下面的一行功能鏈接在JavaScript這些流行的招數......

const reverseNum = num => +("" + ~~num.split("").reverse().join("")); 

,並調用它像這樣:

reverseNum(123); //321 
reverseNum(423.09); //324 
reverseNum(23305.1); //50332 
reverseNum(89112); //21198 
reverseNum(568434.2389); //434865