public class Main {
char[] CHAR_ARRAY = new char[] { //
'0', //
'1', '2', '3', '4', '5', '6', '7', '8', '9', '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' };
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(new Main().convert(1024, 2));
}
char[] convert(int value, int n) {
if (value == 0) return new char[] { '0' };
if (value == 1) return new char[] { '1' };
int length = 0; // get the length of output string.
while (Math.pow(n, length) <= value) length++;
char[] chars = new char[length];
// for each position right, we need to compute the number.
for (int right = length - 1; right >= 0; right--) {
int number = 0;
while (number * Math.pow(n, right) < value) number++;
if (number * Math.pow(n, right) == value) {
// there is no need to compute more number, just fill with 0
chars[right] = CHAR_ARRAY[number];
while (--right >= 0) chars[right] = '0';
return this.revert(chars);
}
// --number is the biggest one for this position.
chars[right] = CHAR_ARRAY[--number];
// minus for further computing
value -= number * Math.pow(n, right);
}
return this.revert(chars);
}
char[] revert(char[] chars){
for (int i = 0; i < chars.length / 2; i++) {
char tmp = chars[i];
chars[i] = chars[chars.length - i - 1];
chars[chars.length - i - 1] = tmp;
}
return chars;
}
}