Я написал следующий код, чтобы отменить целое число в JavaScript. Он отлично работает, но возвращает 0 при вводе -900000. Кто-нибудь знает, что может быть неправильным?
/**
* @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;
};
Вам не нужно отрезать -
знак из отрицательных чисел, вы уже приняли абсолютное значение как x
. Снимите этот цикл, который перемещает цифры и уничтожает ваши значения.
Некоторые отличные ответы уже отправлены.
Я решил показать немного разные варианты:
Здесь фрагмент кода с комментариями, иллюстрирующий, как -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
Math.sign
других решений.
Ясно одно: это гораздо сложнее, чем необходимо. Я думаю, что это будет делать то, что вы хотите:
const rev = (i) => Math.sign(i) * Number(('' + Math.abs(i)).split('').reverse().join(''))
Выглядит слишком сложно. Этого должно быть достаточно:
function reverse(n) {
return Number(Array.from(String(Math.abs(n))).reverse().join('')) * Math.sign(n);
}
console.log(reverse(144));
console.log(reverse(-90000));