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

Pri*_*kar 13 c# algorithm

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

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)

  • @cfern你错过了一点检查,如果这个数字是负数......我的老师回到大学就会有一个实地日... ...-P (2认同)

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)