翻轉整數

原題

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

題目大意

  輸入一個整數對其進行翻轉git

解題思路

  經過求餘數求商法進行操做。算法

代碼實現

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

第一種方法:app

[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. }  

 

 

思路:spa

(1)這道算法題屬於OJ中比較簡單的題目。題意是將給定的整數逆序,可是涉及到幾種特殊狀況須要考慮。.net

(2)爲了便於處理,將整數轉爲字符串。咱們只須要遍歷一次該字符串便可。code

(3)在遍歷的過程當中,須要對正負數進行判斷,當字符串長度大於0時,先取第一個字符進行判斷,看其是否等於‘-’,若是相等blog

         就是負數,須要設置一個標誌位。ip

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

上面這個函數用來返回輸入數的二進制的翻轉值

相關文章
相關標籤/搜索