由于題意可知我們是要將對應的數字轉換為英文,我們要考慮兩點一個是進制的轉換,也就是類似于我們的十進制一到9就多一位,這里的進制就是Z進制也就是27進制一旦到26下一位則進位;另一方面要考慮數字的轉換也就是1~26對應A~Z。解決上述問題則可將對應的數字轉化為Excel的表示。
①將傳進來的數字轉換為27進制下的數據,得到每一位(重點)
②將每一位27進制下的數據轉換為大寫字母
③調用函數返回對應大寫字母
代碼如下👇
public static void main(String[] args) {Scanner scan=new Scanner(System.in);int x=scan.nextInt();if (x==0) {System.out.println("A");}int[] zh1 = zh1(x);//測試數據zh2(zh1);scan.close();}public static int[] zh1(int x) {//轉換1,將數字轉換為26進制下的位數int[] result=new int[100];int i=0;int n=x;while (n>0) {n--;關鍵,為了讓0代表A,依次遞增result[i++]=n%26;n/=26;}return result;}public static void zh2(int []arr) {for (int i = arr.length-1; i >=0; i--) {//將每一位26進制下的數字轉換為英文if (arr[i]==0) {continue;}else {char c=(char) ('A'+arr[i]);System.out.print(c);}}}
進行優化加強👇
public static void zh1(int x) {int[] result=new int[1000005];int i=0;int n=x;while (n-->0) {
// System.out.println(n);//測試點result[i++]=n%26;n/=26;}
// System.out.println(i);//測試點for (int j = i-1; j >=0; j--) {char c=(char) ('A'+result[j]);System.out.print(c);}}
要多解讀