思路:數字轉字符串:先從低位往高位將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);
}
}
運行結果