如何将数字反转为整数而不是字符串?
我遇到了一个问题“如何将数字反转为整数而不是字符串?” 有谁可以帮我找到答案。
这应该这样做:
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();