¿Cómo invierto los dígitos de un número usando bitwise?Dígitos decimales inversos en javascript
de entrada:
x = 123;
de salida:
x = 321;
¿Cómo hacer esto?
¿Cómo invierto los dígitos de un número usando bitwise?Dígitos decimales inversos en javascript
de entrada:
x = 123;
de salida:
x = 321;
¿Cómo hacer esto?
Si quería hacer una inversión sencilla:
var x = 123;
var y = x.toString();
var z = y.split("").reverse().join("");
var aa = Number(z);
document.write(aa);
¿Entonces 1000 y 1 se invierten al mismo número? – kennebec
Buen punto, @kennebc. Debería haberlo dejado en 'var z', como' cadena', pero estaba convirtiendo nuevamente a #. No anticipé el 1000. @alex tiene una solución a la anterior. –
Esto podría fallar. Por ejemplo, ¿qué sucede si la entrada conduce a un desbordamiento si la inviertes? – Christian
Eso no es invertir bits; eso invierte el orden de los dígitos decimales, que es completamente diferente. He aquí una forma (la más eficiente, creo):
var x = 123;
var y = 0;
for(; x; x = Math.floor(x/10)) {
y *= 10;
y += x % 10;
}
x = y;
Si realmente desea invertir los bits, que es:
x = ~x;
En función:
function reverse(n) {
for(var r = 0; n; n = Math.floor(n/10)) {
r *= 10;
r += n % 10;
}
return r;
}
generalmente cuando surge esta pregunta (casi siempre en una entrevista) esperan que responda de esta manera sin convertir el número a una cadena –
Esto no funciona para los decimales. –
@QuentinEngles: la mayoría de las personas necesita hacer esto con números enteros. Algo con una parte fraccionaria probablemente esté mejor hecho (y tal vez incluso mejor representado) como una cadena. – Ryan
aquí es otra camino ...
var reversed = num.toString().split('').reverse().join('');
Si lo quería de nuevo como Number
, use parseInt(reversed, 10)
. Tenga en cuenta, sin embargo, que 0
s no son significativos en un número decimal, y los perderá si los convierte a Number
.
Éstos son funciones de matriz reversibles en JavaScript que manejan números enteros o cadenas:
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;
}
Una vez que tenga los dígitos como una matriz, puede invertir la matriz fácilmente para obtener los dígitos comenzando desde la izquierda o desde la derecha.
La función de cadena es más versátil porque puede encontrar cualquier dígito en una cadena, mientras que la función entera está limitada a enteros.
Puntos de referencia: http://jsperf.com/todigitsarray
Los puntos de referencia entre las dos funciones muestran que en Firefox 10 y Chrome 12, la función de cadena es de 30% a 60% más rápido que la función de número entero. En Opera 12, la función entera es ligeramente más rápida en aproximadamente un 10%.
El bloque de código a continuación debe hacer el truco
<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>
<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>
¿Podría agregar alguna explicación? – Undo
también utilizar esta función
function myfunction(a){
var x=a.toString();
var y= x.split("");
var z=y.reverse();
var result=z.join("");
return result;
} mifuncion (123);
probar esto
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));
solución simple y rápida: Supongamos que desea invertir un número 4546. Tendrá que tomar el recordatorio de cada división por 10 y lo añadirá al resultado hasta que el número es> 0. y a la vez la actualización de la variable num dividiéndolo por 10.
var x = '';
var num = 4546;
while(num>0){
x = x + (num%10);
num = parseInt(num/10);
}
console.log(x);
OK, cómo sobre el uso y el encadenamiento de estos trucos populares en JavaScript en función de una línea de la siguiente manera ...
const reverseNum = num => +("" + ~~num.split("").reverse().join(""));
y llamarlo como estos:
reverseNum(123); //321
reverseNum(423.09); //324
reverseNum(23305.1); //50332
reverseNum(89112); //21198
reverseNum(568434.2389); //434865
¿Quiere decir que invierte los bits o revertir una cadena? Invertir los bits significa cambiar 1 a 0 y viceversa (en un valor binario). –
Quiere decir "invertir los dígitos decimales", no "invertir los bits" ... –
¿Qué quiere decir con "bits", ya que obviamente no se refiere a bits? –