Je suis tombé sur une question "Comment inverser un nombre comme entier et non comme une chaîne?" Quelqu'un pourrait-il m'aider s'il vous plaît à trouver la réponse.Comment faire pour inverser un nombre comme un entier et non comme une chaîne?
Répondre
Cela devrait le faire:
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);
Merci beaucoup, mais je pense que cela ne fonctionnera pas quand le nombre donné a 0 à la fin. tout comme 40 –
il travaillera encore sur les chiffres avec 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();
}
}
Quelque chose comme ça?
public int ReverseInt(int num)
{
int result=0;
while (num>0)
{
result = result*10 + num%10;
num /= 10;
}
return result;
}
En uniligne hackish (mise à jour: utilisé le commentaire de Benjamin pour le raccourcir):
num.ToString().Reverse().Aggregate(0, (b, x) => 10 * b + x - '0');
Un rapide une fois et un quart-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;
}
Ce n'est pas un one-liner parce que je devais inclure return 42;
. Le compilateur C# ne me laisserait pas compiler car il pensait qu'aucun chemin de code ne renvoyait de valeur.
P.S. Si vous écrivez un code comme celui-ci et qu'un collègue l'attrape, vous méritez tout ce qu'il/elle vous fait. Être averti!
EDIT: J'interrogé sur la façon beaucoup plus lente du LINQ one-liner est, j'utilisé le code de référence suivant:
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);
}
résultat (10^6 nombres aléatoires dans la fourchette de int32 positive):
While loop version:
Operation took 279ms
Linq aggregate:
Operation took 984ms
Bien que le one-liner soit très inefficace. – kennytm
Bien sûr, c'est pourquoi je l'ai appelé hackish. C'est plus une curiosité. – cfern
ToCharArray() est redondant et vous pouvez aussi effectuer la conversion char en int de votre sélection dans l'agrégat - économise de l'espace horizontal. :) Voir mon exemple ci-dessous pour la version chaîne seule. –
multipliez-le par -1? préciser votre question s'il vous plaît ...
En fait, comme je l'ai mentionné dans la ligne de question ... Je suis tombé sur cette question dans un site Web, où ils ont publié plusieurs questions d'entrevue. Donc, je suis également confus avec la ligne de question. –
Yay! Une manière de bling. (Non, vraiment. J'espère que cela est plus un « Comment pourrais-je faire ... » question et non quelque chose que vous avez vraiment besoin dans la production)
public int Reverse(int number) {
return int.Parse(number.ToString().Reverse().Aggregate("", (s,c) => s+c));
}
très belle solution! – Flynn
Vous ne pouvez pas. Puisque l'ordinateur pense en hexadécimal dans tous les cas, il est nécessaire pour tokenise le nombre en format arabe, qui est sémantiquement identique à la conversion en chaîne.
@Alex: pour être plus précis, l'ordinateur fonctionne avec des bits et l'hexadécimal est un multiple exact (c'est-à-dire: des groupes de 4 bits pour chaque chiffre hexadécimal). Mais il peut toujours faire des maths comme montré ci-dessus. – 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;
}
Vérifiez ci-dessous simple et facile -
public int reverseNumber(int Number)
{
int ReverseNumber = 0;
while(Number > 0)
{
ReverseNumber = (ReverseNumber * 10) + (Number % 10);
Number = Number/10;
}
return ReverseNumber;
}
Référence:Reverse number program in c#
fil vieux, mais je ne vois pas cette variation:
int rev(int n) {
string str = new String(n.ToString().Reverse().ToArray());
return int.Parse(str);
}
Je regardais la solution suivante. Mais qu'en est-il quand n est négatif?
n = Disons que -123456
Voici un tweak j'ajouté pour traiter les nombres négatifs, avec cette hypothèse il engourdit la même façon négative de la menace.
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;
solution la plus courte:
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)));
Comme par Pritam Karmakar commentaire, Oui, cela ne fonctionne pas lorsque nombre donné a 0 à la fin. Si vous passez le numéro 150 comme il retournera 51 pas 051. donc je devais écrire du code pour afficher le numéro dans l'ordre inverse selon l'entrée d'utilisateur de vérifier cette s'il vous plaît.
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. Comment détecter le remplissage sur un nombre entier et le traiter comme une chaîne?
- 2. random.randint pour un nombre non entier? [Python]
- 3. Comment passer un entier comme paramètre non signé dans VB.NET?
- 4. critères NHibernate pour inverser COMME
- 5. Comment interpréter les données binaires comme un nombre entier?
- 6. Inverser un entier Erlang
- 7. Puis-je formater une chaîne comme un nombre dans .NET?
- 8. Lire une chaîne et analyser un nombre entier dans l'assemblage
- 9. Comment utilisez-vous un non-nombre comme une graine dans un RNG?
- 10. Comment combiner deux entrées reçues et les lire comme un nombre entier dans WINAVR?
- 11. Android: Passing ID ressource comme un entier
- 12. Hibernate: Persist un objet comme une chaîne?
- 13. vb.net convertir un nombre exposant à un nombre entier
- 14. Comment puis-je vérifier si une chaîne contient un nombre inférieur à un nombre entier?
- 15. Comment faire une classe qui agit comme une chaîne?
- 16. xaml Comment référencer une ressource dynamique non comme un attribut mais comme un élément
- 17. Utiliser la chaîne * comme clé dans un ensemble non ordonné
- 18. faire un menu comme skype?
- 19. conversion de chaîne en nombre entier en Pascal, Comment faire?
- 20. Comment est-ce que je peux faire l'arithmétique hexagonale/décimale de 64 bits ET produire un nombre entier dans HEX comme chaîne en Perl?
- 21. SQL: problèmes avec comme et non comme
- 22. Comment entrer un nombre entier de l'utilisateur?
- 23. AuthLogic + PostgreSQL 8.4: persistence_token définie comme une chaîne, puis utilisé comme entier
- 24. Comment convertir un nombre entier en chaîne binaire en C#?
- 25. comment faire un autosuggest comme Freebase
- 26. Comment détecter si un nombre donné est un nombre entier?
- 27. Comment puis-je convertir une chaîne comme 3 10^-20 en un nombre en Perl?
- 28. Comment analyser une chaîne avec des espaces en nombre entier
- 29. C#: Comment puis-je faire un nombre entier négatif?
- 30. Comment traiter une chaîne comme un mois dans SQL Server
Définir "reverse un nombre comme un entier" –
Pouvez-vous être plus précis? –
Vous voulez dire: inverser les chiffres de sa représentation décimale? –