Reverse digits of an integer

One reason your program cannot give the right answer is that you store result in an int but you expect to be able to reverse the number 1534236469. The correct answer would be 9646324351, but that number is greater than the largest possible value of an int so you end up with something else. Try long long or try using input with no more than 9 digits.


Followup: I suggested long long because that will fairly reliably give you an 8-byte integer. You may also get 8 bytes in a long, depending on where you are building your code, but Visual C++ on 32-bit Windows (for example) will give you only 4 bytes. Possibly the 4-byte long will go the way of the 2-byte int soon enough, but at this point in time some of us still have to deal with it.


Jason, You should just change the type from int to long.

   public long  reverse(long x)
    {
        long result = 0;
        while (x != 0)
        {
            result = result * 10 + x % 10;
            x = x / 10;
        }
        return result;
    }

You can write x >0 (doesn't matter though )also after that you have to consider negative numbers , I made that change to your logic as follows (Also use long long to avoid overflow):

      long long reverse(long long x)
      {

           int sign = 1;
           long long ans=0;
           if(x < 0)
             sign = -1;
           x = abs(x);
           while(x > 0)
           {
               ans *= 10;
               ans += x%10;
               x /=10;
           }
           return ans*sign;
      }

Tags:

Algorithm