转换成任意[2, 36]进制的字符串输出

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;
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值