翻转整数

原题

  Reverse digits of an integer.
  Example1: x = 123, return 321
  Example2: x = -123, return -321

题目大意

  输入一个整数对其进行翻转

解题思路

  通过求余数求商法进行操作。

代码实现

public class Solution {
    public int reverse(int x) {
        long tmp = x;
        // 防止结果溢出
        long result = 0;

        while (tmp != 0) {
            result = result * 10 + tmp % 10;
            tmp = tmp / 10;
        }

        // 溢出判断 
        if (result < Integer.MIN_VALUE || result > Integer.MAX_VALUE) {
            result = 0;
        }

        return (int) result;
    }
}

第一种方法:

[java] view plain copy

 

  1. /** 
  2.  * <pre> 
  3.  * 实现将整形数字反转 
  4.  * </pre> 
  5.  *  
  6.  * @param num 
  7.  *            要反转的数字 
  8.  * @return 反转后的数字 
  9.  */  
  10. public static int numReverse(int num) {  
  11.   
  12.     int modNum = 0;// 余数  
  13.     int result = 0;  
  14.   
  15.     while (num / 10 != 0) {// 当num为一位数时,跳出循环  
  16.   
  17.         modNum = num % 10;  
  18.         num = num / 10;  
  19.         result = result * 10 + modNum;  
  20.     }  
  21.   
  22.     return result * 10 + num;// 当num为一位数时,返回结果  
  23. }  

 

 

思路:

(1)这道算法题属于OJ中比较简单的题目。题意是将给定的整数逆序,但是涉及到几种特殊情况需要考虑。

(2)为了便于处理,将整数转为字符串。我们只需要遍历一次该字符串即可。

(3)在遍历的过程中,需要对正负数进行判断,当字符串长度大于0时,先取第一个字符进行判断,看其是否等于‘-’,如果相等

         就是负数,需要设置一个标志位。

(4)在继续遍历的过程中,只需判断字符是否为数字(显然都是),然后通过标志位判断正负后进行累加操作。

(5)需要注意的时,翻转后的的整数可能会超过int的最大值,为了防止越界,我们定义的sun的类型必须为long,这样当大于或

         者小于int的最大值和最小值时就返回0;其余情况直接将long强转为int,并返回结果。

(6)注意上述几个方面后,OJ通过肯定没问题。

 

算法实现代码如下所示(希望对你有所帮助,谢谢):

 

[java] view plain copy

 

  1. public static int reverse(int x) {  
  2.     String s = String.valueOf(x);  
  3.     long sum = 0;  
  4.     boolean isnegitive = false;  
  5.     for (int i = s.length()-1; i >=0 ; i--) {  
  6.         if(s.charAt(0)=='-'){  
  7.             isnegitive = true;  
  8.         }  
  9.           
  10.         if( Character.isDigit(s.charAt(i))){  
  11.             if(isnegitive){  
  12.                 sum = sum * 10 - Integer.parseInt(String.valueOf(s.charAt(i)));   
  13.             }else{  
  14.                 sum = sum * 10 + Integer.parseInt(String.valueOf(s.charAt(i)));  
  15.             }  
  16.         }  
  17.     }   
  18.        
  19.     if(sum>Integer.MAX_VALUE || sum<Integer.MIN_VALUE){  
  20.          return 0;  
  21.     }  
  22.        
  23.     return (int)sum;  

 

第二种方法:

[java] view plain copy

 

  1. /** 
  2.  * <pre> 
  3.  * 实现将整形数字反转 
  4.  * </pre> 
  5.  *  
  6.  * @param num 
  7.  *            要反转的数字 
  8.  * @return 反转后的数字 
  9.  */  
  10. public static int reverse(int num) {  
  11.   
  12.     StringBuffer sb = new StringBuffer();  
  13.     String str = sb.append(num).reverse().toString();  
  14.   
  15.     return Integer.parseInt(str);  

 

int BinaryReverseValue(int x)
{
 int y=0;
 int z;

 while(x!=0)
 {
  z=x%2;
  y=(y<<1)^z;
  x=x/2;
 }

 return y;
}

上面这个函数用来返回输入数的二进制的翻转值

 

转载于:https://my.oschina.net/u/2822116/blog/801420

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值