How to reverse a number as an integer and not as a string?

前端 未结 19 1913
名媛妹妹
名媛妹妹 2020-12-14 03:29

I came across a question \"How can one reverse a number as an integer and not as a string?\" Could anyone please help me to find out the answer? Reversal should reverse the

相关标签:
19条回答
  • 2020-12-14 03:57
    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();
    
    0 讨论(0)
  • 2020-12-14 03:58

    I looked at the following solution. But how about when n is negative?

    Lets say n = -123456

    Here is a tweak I added to it to handle negative numbers, with that assumption it will threat negative numbs the same way.

            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;
    
    0 讨论(0)
  • 2020-12-14 03:58
        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;
        }
    
    0 讨论(0)
  • 2020-12-14 03:59

    Something like this?

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

    As a hackish one-liner (update: used Benjamin's comment to shorten it):

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

    A speedier one-and-a-quarter-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;
    }
    

    It's not a one-liner because I had to include return 42;. The C# compiler wouldn't let me compile because it thought that no code path returned a value.

    P.S. If you write code like this and a co-worker catches it, you deserve everything he/she does to you. Be warned!

    EDIT: I wondered about how much slower the LINQ one-liner is, so I used the following benchmark code:

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

    Result (10^6 random numbers in positive int32 range):

    While loop version:
    Operation took 279ms
    
    Linq aggregate:
    Operation took 984ms
    
    0 讨论(0)
  • 2020-12-14 04:00
    int x = 9876543;
    char[] arr = x.ToString().ToCharArray();
    Array.Reverse(arr);
    Console.WriteLine(int.Parse(new string(arr)));
    
    0 讨论(0)
  • 2020-12-14 04:03

    the shortest solution:

            int reverse=0;
            int number = 21;
    
            while (number > 0)
            {
                reverse = number % 10;
                Console.Write(reverse);
                number = number / 10;  
            }
    
    0 讨论(0)
提交回复
热议问题