解这道题的关键是,要知道十进制转任意进制的方法:除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]);
}
}
}
}