如何将数字反转为整数而不是字符串?

我遇到了一个问题“如何将数字反转为整数而不是字符串?” 有谁可以帮我找到答案。

这应该这样做:

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); 

像这样的东西?

 public int ReverseInt(int num) { int result=0; while (num>0) { result = result*10 + num%10; num /= 10; } return result; } 

作为一个hackish one-liner(更新:使用Benjamin的评论来缩短它):

 num.ToString().Reverse().Aggregate(0, (b, x) => 10 * b + x - '0'); 

更快的一分四分之一class轮:

 public static int ReverseOneLiner(int num) { for (int result=0;; result = result * 10 + num % 10, num /= 10) if(num==0) return result; return 42; } 

这不是一个单行,因为我必须包括return 42; 。 C#编译器不会让我编译,因为它认为没有代码路径返回值。

PS如果您编写这样的代码并且同事抓住它,您应该得到他/她对您所做的一切。 被警告!

编辑:我想知道LINQ单线程的速度有多慢,所以我使用了以下基准代码:

 public static void Bench(Func 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); } 

结果(正int32范围内10 ^ 6个随机数):

 While loop version: Operation took 279ms Linq aggregate: Operation took 984ms 

好极了! 一种金光闪闪的方式。 (不,真的。我希望这更像是“我该怎么办……”的问题,而不是你真正需要的东西)

 public int Reverse(int number) { return int.Parse(number.ToString().Reverse().Aggregate("", (s,c) => s+c)); } 
 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(); } } 

乘以-1? 准确的问题请…

检查以下简单易行 –

 public int reverseNumber(int Number) { int ReverseNumber = 0; while(Number > 0) { ReverseNumber = (ReverseNumber * 10) + (Number % 10); Number = Number / 10; } return ReverseNumber; } 

参考: c#中的反向编号程序

你不能。 由于计算机在任何情况下都以hex表示,因此您需要将数字标记为阿拉伯语格式,这在语义上与转换为字符串相同。

  ///  /// Reverse a int using its sting representation. ///  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; } 

旧线程,但我没有看到这种变化:

  int rev(int n) { string str = new String(n.ToString().Reverse().ToArray()); return int.Parse(str); } 

我看了下面的解决方案。 但是当n为负时怎么样?

可以说n = -123456

这是我为了处理负数而添加的一个调整,假设它会以同样的方式威胁负面麻木。

  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; 

最短的解决方案:

  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))); 

根据Pritam Karmakar的评论,是的,当给定的数字最后为0时,这将不起作用。 如果您将数字传递为150,它将返回51而不是051.所以我编写代码以按照用户输入的反向顺序显示数字,请检查此项。

 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(); 
  public static void Main(string[] args) { int reversed = Reverse(-7360); } public static int Reverse(int number, int left = 0, int right = 0) { if (number == 0) return left + right; return Reverse(number / 10, left * 10 + right * 10, number % 10); } 
  static void Main(string[] args) { Console.WriteLine("Please enter number"); int number = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(ReverseLoop(number)); Console.WriteLine(ReverseRecursive(number)); Console.ReadLine(); } public static int ReverseRecursive(int number) { int remainder = number % 10; number = number / 10; if (number < 1) return remainder; return ReverseRecursive(number) + remainder * Convert.ToInt32(Math.Pow(10, number.ToString().Length)); } public static int ReverseLoop(int number) { int reversed = 0; while (number > 0) { reversed = reversed * 10 + (number % 10); number = number / 10; } return reversed; } 
 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();