2017-06-27 18 views
1

JavaScriptで整数を反転させるために次のコードを書いています。それはうまく動作しますが、-900000の入力が与えられたときに0を返します。誰が何が間違っているかも知っていますか?JavaScriptの整数を逆にする

/** 
* @param {number} x 
* @return {number} 
*/ 
var reverse = function(x) { 
    var negative_number= false; 
    var k; 
    var new_string; 
    if(x<0){ 
     negative_number = true; 
     x=Math.abs(x); 
    } 
    var n = x.toString(); // convert from number to string 
     // Step 1. Use the split() method to return a new array 
    var splitString = n.split(""); // var splitString = "hello".split(""); 
    // ["h", "e", "l", "l", "o"] 
    if (negative_number) 
    { 
     for (var i=0; i< splitString.length-1; i++) 
     { 
      splitString[i]=splitString[i+1]; 
     } 
    } 
    // Step 2. Use the reverse() method to reverse the new created array 
    var reverseArray = splitString.reverse(); // var reverseArray = ["h", "e", "l", "l", "o"].reverse(); 
    // ["o", "l", "l", "e", "h"] 

    // Step 3. Use the join() method to join all elements of the array into a string 
    var joinArray = reverseArray.join(""); // var joinArray = ["o", "l", "l", "e", "h"].join(""); 
    // "olleh" 
    //return joinArray; 
    var number = Number(joinArray); 
    if (negative_number) 
     number= -Math.abs(number); 
    //Step 4. Return the reversed string 
    return number; 
}; 
+1

このforループのポイントは何ですか? 'for(var i = 0; i

+0

あなたは何を正確に達成しようとしていますか?これは何を期待していますか?また-1002を渡すと-2200になります。 – Jorg

+0

@StephenQuan:負の数の場合は、負の符号を取り除く必要があります。ああ、私はすでに上記のことをしていることがわかります。 –

答えて

2

あなたはすでにxとして絶対値を取った、負の数から-記号をオフにスライスする必要はありません。数字を動かして値を破壊するループを削除します。

2

明確なことは、これが必要以上に複雑であることです。私はこれがあなたが望むことをすると思う:

const rev = (i) => Math.sign(i) * Number(('' + Math.abs(i)).split('').reverse().join('')) 
+0

Scottに感謝します。私は実際にPHPの背景から来て、JavaScriptに新しいです。問題を解決しながらそれを学ぶだけです。しかし、次のステップとしてこれらのソリューションの読み込み時間に取り組まなければならないので、ありがたいことです。 –

+0

私はその言語に新しい人を見つけたと思った。 :-)私の要点は、読み込み時間とはまったく関係なく、厳密にはソリューションのサイズとは関係ありませんでした。代わりに、手動で作成したテクニックの多くは既に組み込まれていることに気づきたいと思います。@StephenQuanのソリューションは実際にこれをより効果的に示しています。 –

1

ひどく見えます。これは十分なはずです:

function reverse(n) { 
 
    return Number(Array.from(String(Math.abs(n))).reverse().join('')) * Math.sign(n); 
 
} 
 

 
console.log(reverse(144)); 
 
console.log(reverse(-90000));

3

いくつかの優れた答えはすでに掲載します。私はわずかに異なる変動を示すことにしました

  • 負の場合
  • 機能の残りの部分を処理するために使用「再帰」をちょうど正の場合
  • に焦点を当てるには、に各中間計算をブローク独自のライン

はここ-123-321なった様子を示すコメント付きのコードスニペットです:

function reverse(x) { 
 
    if (x < 0) return -reverse(-x); // reverse(-123) === -reverse(123) 
 
    var str = x.toString(); // "123" 
 
    var strArray = str.split(""); // [ "1", "2", "3" ] 
 
    var revArray = strArray.reverse(); // [ "3", "2", "1" ] 
 
    var rev = revArray.join(""); // "321" 
 
    return Number(rev); 
 
} 
 

 
console.log(reverse(-123)); // Outputs: -321 
 
console.log(reverse(0)); // Outputs: 0 
 
console.log(reverse(-900000)); // Outputs: -9

+0

私はここで再帰が好きです。これにより、他のソリューションの 'Math.sign'バージョンよりもクリーンになります。 –