10进制与其他进制之间的转换

背景:要求一次输入A-Z,然后是AA-AZ这样一次有序递增的输出时,首先联想到10进制与26进制之间的转换,其次在考虑26进制转换成相应的字母。为了简单,省去部分代码的复杂度,在10进制转换26进制过程中,拿到每次26进制相应位数的系数,这样子,就可以直接就可以拼接出最后的要求结果。如27 = 1* 26 + 1,获取[1,1],可直接拼接成AB这样的结果。

具体代码实现:


	@Test
	public void testConversion(){
		int[] coeffients = getCoefficient(26, 26);
		String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		String result = "";
		for(int len = coeffients.length, i=len-1;i >=0;i--){
			int index = coeffients[i];
			index = len != 1&& i==len-1 ?index-1:index;// 首位减一
			result += alphabet.charAt(index);
		}
		System.out.print(result);// AA
	}
	/**
	 * 
	 * @param num 要转换的十进制数
	 * @param system 进制数
	 * @return
	 */
	public int[] getCoefficient(int num,int system){
		int len = 1;
		if(num >= system){
		String logarithm = Math.log(num)/Math.log(system)  + "";// 对数
		len = Integer.parseInt(logarithm.split("\\.")[0]+"") + 1;
		}
		int[] arr = new int[len];
		String decomposition  = "" ;
		for(int i = len -1;i>=0;i--){
			int divisor = (int) Math.pow(system,i);
			int quotient = num / divisor; // 商数
			int remainder = num % divisor;// 余数
			decomposition += quotient + "*" +(system + "^" +i) + "+";
			arr[i] = quotient;
			num = remainder;
		}
//		 decomposition : 79 = 3*5^2+0*5^1+4*5^0
		System.out.println(decomposition.substring(0,decomposition.length()-1));
		return arr;
	}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值