解這道題的關鍵是,要知道十進制轉任意進制的方法:除D取餘的倒排法(D代表進制數)
舉個例子:
76 ——>二進制
76 / 2 ... 0
= 38 / 2 ... 0
= 19 / 2 ... 1
= 9 / 2 ... 1
= 4 / 2 ... 0
= 2 / 2 ... 0
= 1 / 2 ... 1
76(10) = 1001100(2)
76——>八進制
76 / 8 ... 4
= 9 / 8 ... 1
= 1 / 8 ... 1
76(10) = 114(8)
76——>十六進制
76 / 16 ... 12
= 4 / 16 ... 4
76(10) = 4C(16)
這裏我用遞歸的方法,進行求解。需要注意的是,遞歸之後,要回溯過來。把原來的除D的之前的狀態,再轉換過來。
注意:
需要加上餘數,才能得到上次狀態的值,也即沒有除D之前的值。
下面看代碼:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int [] count = new int [10];
int i;
String data = new Scanner(System.in).nextLine();
char num [] = data.toCharArray();
for(i = 0; i < num.length; i++) {
count[(int)num[i] - 48]++;
}
for(i = 0; i < 10; i++) {
if(count[i] != 0) {
System.out.println(i + ":" + count[i]);
}
}
}
}