K僞進制

思路:數字轉字符串:先從低位往高位將26的n次方(n從0開始,每次加1)最多置爲1個,然後從高位往低位計算之前的1個再加上當前能夠加上最大的多少個26的n次方,最後按照下標從高位往低位輸出.
字符串轉數字:從高位往低位依次累加當前個數乘以26的n次方(n從0開始,每次加1).

僞K進制字符串與數字對應

一個字符類型的數組chs,其中所有的字符都不同,生成相對應的數值關係。
例如,chs=[‘A’,‘B’,‘C’,…‘Z’],則字符串與整數的對應關係如下:
A,B…Z, AA,AB…AZ,BA,BB…ZZ, AAA… ZZZ, AAAA…
1,2…26,27, 28…52,53, 54…702,703…18278,18279…

package Test02;
import java.util.Scanner;
public class Scale {
    public static void main(String[] args) {
        int[] a= new int[1000];
            char c[]={'A','B','C','D','E','F','G','H','I','J','K','L','M',
                        'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
            int n;
            Scanner reader = new Scanner(System.in);
            n = reader.nextInt();
            int i = 0;
            while(n >= Math.pow(26,i)){
                a[i] = 1;
                n -= Math.pow(26,i);
                i++;
        }
            //index記錄可以出現字符的最大下標 
            int index = --i;
            //數字轉字符串 
            while(n != 0){
                int j;
                for(j = 0; j * Math.pow(26,i) <= n; j++){  //j - 1表示當前下標爲i的26的平方能夠再增加多少個 
                }  
                a[i] = a[i] + (j - 1);
                n -= (j - 1)*Math.pow(26,i);
                i--;
            }
            for(int j = index; j >= 0; j--){
                System.out.print(c[a[j]-1]);
            }
            System.out.println();
            //字符串轉數字
            String s = null;
            s = reader.next();
            long sum = 0;
            int num = 0;
            for(int i1 = s.length()-1; i1 >= 0; i1--){  //從高位往低位累加(j+1)個26的num次方 
                for(int j = 0; j < 26; j++){
                    if(s.charAt(i1) == c[j]){
                        sum += Math.pow(26,num++)*(j+1);
                    }
                }
            }
            System.out.println(sum);
    }
}

運行結果
K僞進制

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章