Java实现数制转换

在用程序实现数制转换前,首先要清楚数制转换的本质其实就是用一组进制不同的数表示同一个值。由于我们比较熟悉10进制,所以提供一个以10进制为桥梁实现的数制转换。

package test;

public class NumberTrans {

	//a为输入的进制、str为该进制下的字符串、b为想要转化的目标进制
	public StringBuffer numTrans(int a, String str, int b){
		//创建一个存储分割后字符串的数组
		String value[] = new String[str.length()];
		//创建一个StringBuffer,之所以用StringBuffer是因为内置的append、reverse方法比较方便
		//由于不涉及线程安全问题,用StringBuilder也ok
		StringBuffer res = new StringBuffer();
		//十进制数(中间值)
		int sum = 0;
		//数位权重
		int stage = str.length();
		//根据进制及数位权重将输入字符串转化为10进制表示的串
		for(int i=0; i<str.length(); i++){
			//截取字符串,装入数组
			value[i] = str.substring(i, i+1);
			//将串中的字母翻译为数字
			switch(value[i].toLowerCase()){
			case "a": value[i] = "10"; break;
			case "b": value[i] = "11"; break;
			case "c": value[i] = "12"; break;
			case "d": value[i] = "13"; break;
			case "e": value[i] = "14"; break;
			case "f": value[i] = "15"; break;
			}
			//计算得出十进制表示
			sum += Integer.valueOf(value[i])*Math.pow(a, stage-1);
			stage--;
			
		}
		
		if(sum<b){//b的进制比十进制表示的数要大,就不需要进一步的操作了
			res.append(String.valueOf(sum));
		}else{//否则需要做短除,这里用整除模拟短除后的结果是反的串
			while(sum>=b){
				if(sum<b) res.append(String.valueOf(sum/b)); 
				
				res.append(String.valueOf(sum%b));
				sum = sum/b;
			}
			if(sum<b) res.append(String.valueOf(sum));
		}
		//这里reverse一下,输出正确顺序的b进制表示
		return res.reverse();
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		NumberTrans numTrans = new NumberTrans();
		StringBuffer res = numTrans.numTrans(16, "110", 10);
		System.out.println(res);
	}

}

附上结果如下:

这其中的数制转换至限于2进制到16进制。主要受限于翻译那一步,若想扩展各位看官可以自己举一反三。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值