cfe*_*ern 44
像这样的东西?
public int ReverseInt(int num)
{
int result=0;
while (num>0)
{
result = result*10 + num%10;
num /= 10;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
作为一个hackish one-liner(更新:使用Benjamin的评论来缩短它):
num.ToString().Reverse().Aggregate(0, (b, x) => 10 * b + x - '0');
Run Code Online (Sandbox Code Playgroud)
更快的一分四分之一班轮:
public static int ReverseOneLiner(int num)
{
for (int result=0;; result = result * 10 + num % 10, num /= 10) if(num==0) return result;
return 42;
}
Run Code Online (Sandbox Code Playgroud)
这不是一个单行,因为我必须包括return 42;
.C#编译器不会让我编译,因为它认为没有代码路径返回值.
PS如果您编写这样的代码并且同事抓住它,您应该得到他/她对您所做的一切.被警告!
编辑:我想知道LINQ单线程的速度有多慢,所以我使用了以下基准代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
结果(正int32范围内10 ^ 6个随机数):
While loop version:
Operation took 279ms
Linq aggregate:
Operation took 984ms
Run Code Online (Sandbox Code Playgroud)
jer*_*jer 28
这应该这样做:
int n = 12345;
int left = n;
int rev = 0;
while(Convert.ToBoolean(left)) // instead of left>0 , to reverse signed numbers as well
{
r = left % 10;
rev = rev * 10 + r;
left = left / 10; //left = Math.floor(left / 10);
}
Console.WriteLine(rev);
Run Code Online (Sandbox Code Playgroud)