Me encontré con una pregunta "¿Cómo se puede revertir un número como un número entero y no como una cadena?" ¿Alguien podría ayudarme a encontrar la respuesta?¿Cómo revertir un número como un entero y no como una cadena?
Respuesta
Esto debe hacerlo:
int n = 12345;
int left = n;
int rev = 0;
while(left>0)
{
r = left % 10;
rev = rev * 10 + r;
left = left/10; //left = Math.floor(left/10);
}
Console.WriteLine(rev);
Muchas gracias, pero creo que esto no funcionará cuando el número dado tenga 0 al final. al igual que 40 –
, seguirá funcionando en números con 0 – jerjer
using System;
public class DoWhileDemo {
public static void Main() {
int num;
int nextdigit;
num = 198;
Console.WriteLine("Number: " + num);
Console.Write("Number in reverse order: ");
do {
nextdigit = num % 10;
Console.Write(nextdigit);
num = num/10;
} while(num > 0);
Console.WriteLine();
}
}
¿Alló como esto?
public int ReverseInt(int num)
{
int result=0;
while (num>0)
{
result = result*10 + num%10;
num /= 10;
}
return result;
}
Como hacker de una sola línea (actualización utilizado comentario de Benjamin para acortarlo):
num.ToString().Reverse().Aggregate(0, (b, x) => 10 * b + x - '0');
Una rápida de uno y un cuarto-liner:
public static int ReverseOneLiner(int num)
{
for (int result=0;; result = result * 10 + num % 10, num /= 10) if(num==0) return result;
return 42;
}
No es de una sola línea porque tuve que incluir return 42;
. El compilador de C# no me dejaba compilar porque pensaba que ninguna ruta de código devolvía un valor.
P.S. Si escribe un código como este y un compañero de trabajo lo atrapa, se merece todo lo que le hace a usted. ¡Ten cuidado!
EDIT: I preguntó acerca de cómo mucho más lento el LINQ de una sola línea es, por lo que utiliza el siguiente código de referencia:
public static void Bench(Func<int,int> myFunc, int repeat)
{
var R = new System.Random();
var sw = System.Diagnostics.Stopwatch.StartNew();
for (int i = 0; i < repeat; i++)
{
var ignore = myFunc(R.Next());
}
sw.Stop();
Console.WriteLine("Operation took {0}ms", sw.ElapsedMilliseconds);
}
de Resultados (10^6 números aleatorios en el rango int32 positivo):
While loop version:
Operation took 279ms
Linq aggregate:
Operation took 984ms
Aunque el one-liner es muy ineficiente. – kennytm
Por supuesto, es por eso que lo llamé hackish. Es más una curiosidad. – cfern
ToCharArray() es redundante y puede hacer la conversión de char a int de su selección en el agregado también - ahorra espacio horizontal. :) Vea mi ejemplo a continuación para la versión solo de cadena. –
multiplicarlo por -1? precisa su pregunta por favor ...
En realidad, como mencioné en la línea de preguntas ... me encontré con esta pregunta en un sitio web, donde se han publicado varias preguntas de la entrevista. Entonces también estoy confundido con la línea de pregunta. –
Yay! Una manera bling. (No, en serio. Espero que esto es más un "¿Cómo voy a hacer ..." cuestión y no es algo que realmente necesita en la producción)
public int Reverse(int number) {
return int.Parse(number.ToString().Reverse().Aggregate("", (s,c) => s+c));
}
¡solución muy agradable! – Flynn
No se puede. Como la computadora piensa en hexadecimal en cualquier caso, es necesario que el número se muestre en formato árabe, que es semánticamente idéntico a la conversión a cadena.
@Alex: para ser más precisos, la computadora funciona con bits y hexadecimal es un múltiplo exacto (es decir: grupos de 4 bits por cada dígito hexadecimal). Pero todavía puede hacer matemáticas, como se mostró arriba. – kriss
/// <summary>
/// Reverse a int using its sting representation.
/// </summary>
private int ReverseNumber(int value)
{
string textValue = value.ToString().TrimStart('-');
char[] valueChars = textValue.ToCharArray();
Array.Reverse(valueChars);
string reversedValue = new string(valueChars);
int reversedInt = int.Parse(reversedValue);
if (value < 0)
reversedInt *= -1;
return reversedInt;
}
Comprobar debajo simple y fácil -
public int reverseNumber(int Number)
{
int ReverseNumber = 0;
while(Number > 0)
{
ReverseNumber = (ReverseNumber * 10) + (Number % 10);
Number = Number/10;
}
return ReverseNumber;
}
Referencia:Reverse number program in c#
hilo viejo, pero no vi esta variación:
int rev(int n) {
string str = new String(n.ToString().Reverse().ToArray());
return int.Parse(str);
}
Miré la siguiente solución. Pero, ¿qué tal si n es negativo?
permite decir n = -123.456
Aquí es un pellizco añadí a ella para manejar números negativos, con el supuesto de que se adormece negativo amenaza de la misma manera.
int reverse = 0;
bool isNegative = false;
if (n < 0)
isNegative = true;
n = Math.Abs(n);
while (n > 0)
{
int rem = n % 10;
reverse = (reverse * 10) + rem;
n = n/10;
}
if (isNegative)
reverse = reverse * (-1);
return reverse;
la solución más corta:
int reverse=0;
int number = 21;
while (number > 0)
{
reverse = number % 10;
Console.Write(reverse);
number = number/10;
}
int x = 9876543;
char[] arr = x.ToString().ToCharArray();
Array.Reverse(arr);
Console.WriteLine(int.Parse(new string(arr)));
Según Pritam Karmakar comentario, Sí, esto no funcionará cuando el número dado tiene 0 al final. Si pasa el número como 150, devolverá 51, no 051. , así que tuve que escribir el código para mostrar el número en orden inverso, según la entrada del usuario, por favor verifique esto.
int reverseNum = 0, reminder, num;
Console.WriteLine("Enter Number to Reverse:");
int.TryParse(Console.ReadLine(), out num);
bool isZero = false;
int cnt=0;
while (num > 0)
{
reminder = num % 10;
reverseNum = (reverseNum * 10) + reminder;
num = num/10;
if (reverseNum == 0)
isZero = true;
cnt++;
}
if (isZero)
{
Console.WriteLine(reverseNum.ToString().PadLeft(cnt, '0'));
}
else
{
Console.WriteLine(reverseNum);
}
Console.ReadKey();
int sum = 0; int remainder = 0;
int n = 123;
for (int i = n; i > 0; i = i/10)
{
remainder = i % 10;
sum = (sum * 10) + remainder;
}
Console.WriteLine(sum);
Console.ReadLine();
- 1. convertir un número entero en una cadena como 3
- 2. Representar hash MD5 como un número entero
- 3. Arrays asociativos PHP: cómo tratar un entero como una cadena
- 4. No se puede analizar como un número entero
- 5. cómo pasar un entero como ConverterParameter?
- 6. ¿Es posible envolver un entero y llamarlo como un entero?
- 7. VBA Fecha como número entero
- 8. ¿Cómo interpretar datos binarios como un número entero?
- 9. ¿Tiene algún inconveniente para almacenar un número entero como una cadena en una base de datos?
- 10. PreferenceActivity: guardar el valor como número entero
- 11. ¿Cómo obtener un entero de MySQL como número entero en PHP?
- 12. Lectura de 3 bytes como un número entero
- 13. Almacene la enumeración como un número entero en RavenDB
- 14. tratar JSON objetos de valor como un número entero
- 15. Lua: imprimir entero como un binario
- 16. booleanos de adición (como número entero)
- 17. Convertir la fecha actual como número entero
- 18. Analizando la cadena "009" como un entero en javascript?
- 19. En Oracle, ¿cómo convierto un número como 1 en una cadena como "1st"?
- 20. número entero no 'se reduce a un número entero'
- 21. Formateo de un entero como octal
- 22. Verificar si una cadena contiene un número entero
- 23. ¿Cómo no mostrar el número como exponente?
- 24. Convertir un número entero en una cadena sin asignar memoria
- 25. NSSortDescriptor ordenar un campo de cadena como un número con el bloque de comparación no funciona
- 26. Cadena binaria al número entero
- 27. ¿Por qué no un literal octal como un lanzamiento de cadena a un número?
- 28. ¿Cómo saco un entero de un NSDictionary y lo pongo en un número entero?
- 29. Entero como tipo primitivo
- 30. Mysql selecciona la orden por actos como una cadena, no un número
Definir "revertir un número como un entero" –
¿Puede ser más preciso? –
¿Quiere decir: invertir los dígitos de su representación decimal? –