反转整数的数字

时间:2015-02-17 23:07:56

标签: 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;
}

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

12 个答案:

答案 0 :(得分:5)

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


<强>跟进: 我建议long long,因为这会相当可靠地给你 一个8字节的整数。您可能还会在long中获得8个字节,具体取决于 在哪里构建代码, 但是32位Windows上的Visual C ++(例如)会 只给你4个字节。可能这个4字节的长整数很快就会成为2字节int的方式,但是在这个时候我们中的一些人还是要处理它。

答案 1 :(得分:3)

杰森, 您只需将类型从int更改为long。

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

答案 2 :(得分: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;
      }

答案 3 :(得分:1)

如何转换为字符串并反转?很简单:

   int reverseDigits(int x) {
      String s = Integer.toString(x);
      for (int i = 0; i < s.length() / 2; i++) {
        char t = s[i];
        s[i] = s[s.length() - i - 1];
        s[s.length() - i - 1] = t;
      }
      return Integer.parseInteger(s); // subject to overflow
   }

答案 4 :(得分:0)

为什么不简单地做:

while (x)
  print x%10
  x /= 10
如果x的值最初为负,则使用双符号转换

,以避免出现什么mod -ve数的问题。

答案 5 :(得分:0)

您使用int存储数字,而数字超出int的范围。你在这个问题上有标记算法。所以,更好的方法是使用链接列表。你可以谷歌更多关于它。有很多算法可以反转链接列表。

答案 6 :(得分:0)

可以使用long类型来存储结果

public int reverse(int x) {
    long result = 0;
    while (x != 0) {
        result = result * 10 + x % 10;
        x /= 10;
    }
    if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE)
        return 0;
    return (int)result;
}

答案 7 :(得分:0)

Schultz9999答案的缩短版本:

int reverseDigits(int x) {
  String s = Integer.toString(x);
  s=new StringBuilder(s).reverse().toString();
  return Integer.parseInt(s); 
}

答案 8 :(得分:0)

这是反向编号::

的python代码
n=int(input('Enter the number:'))
r=0

while (n!=0):        
    remainder=n%10
    r=remainder+(r*10)
    n=n//10       

print('Reverse order is %d'%r)

答案 9 :(得分:0)

一个紧凑的Python解决方案是

reverse = int(str(number)[::-1])

如果可能出现负数,则

num = abs(number)          # absolute value of the number
rev = int(str(num)[::-1])  # reverse the number
reverse = -rev             # negate the reverse

答案 10 :(得分:0)

这是在Leetcode上发布的问题,给出的错误答案为0。提示是在返回反向整数之前,我们必须检查它是否不超过32位int的限制,即2 ^ 31 -1。

Python 3中的代码:

class Solution:
def reverse(self, x: int) -> int:
    s=[]
    rev=0
    neg=False
    if x==0:
        return 0
    if x<0:
        x=x* -1
        neg=True
    while x:
        s.append(x%10)
        x=int(x/10)
    i=len(s)
    j=0
    while i:
        rev=rev+s[j]*10**(i-1)
        i=i-1
        j=j+1
    if(rev>2**31-1):
        return 0
    return rev * -1 if neg else rev

答案 11 :(得分:0)

在JS中,我是这样写的

function reverseNumber(n) {
  const reversed = n
    .toString()
    .split('')
    .reverse()
    .join('');

  return parseInt(reversed) * Math.sign(n);
}