2015-02-17 79 views
3

如何反转数字?整数的反转数字

例1:X = 123,返回321 例题: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,这是错误的。你对我的计划有什么看法?谢谢。

+1

,除非的Python代码int是需要使用字符串作为输入。 1.如果存在,检查减号删除。 2.调用string.reverse()3.如果删除它,则加上减号 – Nick 2015-02-17 23:31:54

回答

2

你可以写X> 0(不虽然重要)也后你必须要考虑负数,我做了改变你的逻辑如下(也用很长很长,以避免溢出):

 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; 
     } 
+0

OP的问题案例是一个正数。对于正数,你的代码看起来与他的相同。它是否在'x = 1534236469'上产生了正确的结果? – jez 2015-02-17 23:15:54

+0

@jez也作为OP在例子中给了一个负数我覆盖了这种情况 – sashas 2015-02-17 23:17:57

+0

这和我的错了 – 2015-02-17 23:19:32

0

为什么不能简单地做:

while (x) 
    print x%10 
    x /= 10 

具有双重符号转换,如果x的值是原本负,以避免什么MOD​​一个-ve数是个问题。

+0

非常好,但我需要返回一个数字 – 2015-02-17 23:53:47

5

一个原因你的程序不能得到正确的答案是,你 店resultint,但你希望能够 扭转号1534236469. 正确的答案应该是9646324351, 但这一数字大于一个int 的最大可能值,所以你最终得到了别的东西。 尝试long long或尝试使用不超过9位数字的输入。


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

+0

是的,但在OP的代码 – aruisdante 2015-02-17 23:18:33

+0

中有一个大的迹象错误是的,你是对的,我知道这个数字超过了int类型,所以如何纠正它? – 2015-02-17 23:20:19

+0

使用“长”或相当于。但是,它仍然不会让你的代码适用于消极的nubmers。 – aruisdante 2015-02-17 23:21:15

1

Jason, 您应该将类​​型从int更改为long。

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

这不适用于负数,这是OP输入示例的一部分。 – aruisdante 2015-02-17 23:22:47

+1

这也取决于你运行的环境。在64位Linux上的g ++会给你8个字节的'long',Win32上的Visual C++会给你4个字节。 – 2015-02-17 23:24:37

+0

如果输入的数字超过了long类型,我认为它应该是错误的。我如何捕获溢出,如果溢出返回0 – 2015-02-17 23:27:48

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 
    } 
0

您正在使用int来存储数字,而数字超出了int的范围。您在此问题中标记了算法。所以,更好的方法是使用链接列表。你可以更多地了解它。有很多颠倒链接列表的算法。

0

可以使用长型存储结果

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

Schultz9999的回答的一个较短的版本:

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

这里是反向号码::

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)