反转整数的数字

Jas*_* Ni 7 algorithm

如何扭转一个数字?

例1:x = 123,返回321例2:x = -123,返回-321

这是我的答案:

public int reverse(int x) {
    int result = 0;
    while(x != 0){
        result = result * 10 + x % 10;
        x = x / 10;
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

但是当我输入1534236469时,它会输出1056389759,这是错误的.你觉得我的节目怎么样?谢谢.

Dav*_*d K 5

你的程序无法给出正确答案的一个原因是你存储result在一个int但你希望能够反转数字1534236469.正确答案是9646324351,但是这个数字大于最大可能的值,int 所以你最终用别的东西.尝试long long或尝试使用不超过9位数的输入.


后续: 我建议long long因为这将相当可靠地给你一个8字节的整数.您可能还会获得8个字节long,具体取决于您构建代码的位置,但32位Windows上的Visual C++(例如)将只提供4个字节.可能这个4字节的长度很快就会成为2字节int的方式,但是在这个时候我们中的一些人仍然需要处理它.


sas*_*has 2

您可以写 x >0 (不过没关系)之后您还必须考虑负数,我对您的逻辑进行了如下更改(还使用 long long 以避免溢出):

      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;
      }
Run Code Online (Sandbox Code Playgroud)