劍指Offer(Java版):把十進制數字用A~Z表示成二十六進制。

題目:在Excel2003中,用A表示第1列,B表示第2列......Z表示第26列,AA表示第27列,AB表示第28列......以此類推。請寫出一個函數,輸入用字母表示的列號編碼,輸出它是第幾列。

這是一道關於進制的題目,其本質是把十進制數字用A~Z表示成二十六進制。 函數

A是65,A到Z是26個字母,A對應1,至關於26*0+65-65+1=1;AB則是26*1+66-65+1=28,ABC則是26*28+67-65+1=731,編碼

package cglib;spa

public class List1
{  
    public static int numberTransform2(String str)   
      
    {    
        char[] strArray = str.toCharArray();
        int num = 0;
        if(strArray.length < 0)//若是沒有輸入字符,則報錯。  
        {  
            System.out.println("沒有輸入字符");  
            return -1;  
         }  
        int sum = 0;
    for(int i =0; i < strArray.length; i++)   
      
      {    
    System.out.println("i="+i+",strArray[i]="+strArray[i]);
    System.out.println("((int)(strArray[i] -'A'))="+((int)(strArray[i] -'A')));
     int temp = strArray[i] - 'A';
     System.out.println("減A的值後temp="+temp);
     if(temp >= 26 || temp < 0)  
     {  
         System.out.println("字符不合規範");    
         return -1;  
     }  
       sum = 26*sum + temp + 1;
       //num = num * 26 + ((int)(strArray[i] -'A') +1);
       //System.out.println("運算後num="+num);
       System.out.println("運算後sum="+sum);
      
     }               
      
     return sum;    
      
    }    
     
 
    public static void main(String[] args) {  
        
        System.out.println(numberTransform2("AB"));  
        
}
}.net

 

輸出:orm

i=0,strArray[i]=A
((int)(strArray[i] -'A'))=0
減A的值後temp=0
運算後sum=1
i=1,strArray[i]=B
((int)(strArray[i] -'A'))=1
減A的值後temp=1
運算後sum=28
28blog

相關文章
相關標籤/搜索