进制转换

进制转换

import java.util.Scanner;


public class TextNumberConversion{  //操作数值转换的类
	
	public static int NumberToTen(int beforeConversion,String number) { //其他转换成十进制
		
		double result = 0;
		String subString; //根据字符串的长度循环获得单个元素
		for(int i = 0;i < number.length();i++)
		{
			subString = number.substring(i,i+1);  //截取字符串
			if(beforeConversion == 16)   //如果之前是16进制
			{
				subString = sixteenCharToNumber(number); //十六进制字母转换成数字        pow() 方法可返回 x 的 y 次幂的值。
			}
			result +=Integer.parseInt(subString)*Math.pow(beforeConversion, number.length()-i-1);  // parseInt() 方法用于将字符串参数作为有符号的十进制整数进行解析
		}
		return (int)result;
		
	}
	
	public static String TenToNumber(int afterConversion,String number) {  //十进制转换成其他进制
		int current = Integer.parseInt(number);   //将字符串转换成整数
		String opResult = "";
		if(afterConversion==16) //判断转换后的是否为十六进制
		{
			while(current>=afterConversion) //逢十六进一
			{
				opResult += sixteenNumberToChar(current%afterConversion);
				current/=afterConversion;
			}
			if(current!=0)
			{
				opResult+=sixteenNumberToChar(current);//最终余数
			}
		}
		else {
			while(current>=afterConversion)   //转换为2或8进制
			{
				opResult += current%afterConversion;
				current/=afterConversion;
			}
			if(current!=0)
			{
				opResult+=current;
			}
		}
		
		String riResult ="";   //倒序二进制字符串
		for(int i=opResult.length()-1;i>=0;i--)
		{
			riResult += opResult.substring(i,i+1);
		}
		return riResult;
	}
	
	public static String sixteenCharToNumber(String s) //十六进制字母对应数字
	{
		String num ="";
		if(s.equals("A")||s.equals("a"))
			num = "10";
		else if (s.equals("B")||s.equals("b")) 
			num = "11";
		else if (s.equals("C")||s.equals("c")) 
			num = "12";
		else if (s.equals("D")||s.equals("d")) 
			num = "13";
		else if (s.equals("E")||s.equals("e")) 
			num = "14";
		else if (s.equals("F")||s.equals("f")) 
			num = "15";
		else 
			num = s;
		return num;
	}
	
	public static String sixteenNumberToChar(int num) //十六进制数字对应字母
	{
		String c ="";
		if(num == 10)
			c = "A";
		else if(num == 11)
			c = "B";
		else if(num == 12)
			c = "C";
		else if(num == 13)
			c = "D";
		else if(num == 14)
			c = "E";
		else if(num == 15)
			c = "F";
		else 
			c = String.valueOf(num);   //数字转String
		return c;
	}
	public static void main(String []args) {
		String number;
		int beforeConversion,afterConversion;
		String result="";
		String stop="";
		Scanner read = new Scanner(System.in);
		do {
			System.out.println("分别请输入数,转换前进制,转换后进制");
			number = read.next();
			beforeConversion = read.nextInt();
			afterConversion = read.nextInt();
			stop = "Q";
		}while(stop!="Q");
		
		try {
			if (beforeConversion!=10) {
				String temp=String.valueOf(NumberToTen(beforeConversion, number));
				result = String.valueOf(TenToNumber(afterConversion, number));
			}else {
				result =String.valueOf(TenToNumber(afterConversion, number));
			}
			System.out.println(beforeConversion+"进制的数"+number+"转换成"+afterConversion+"进制为:"+result);
		} catch (Exception e) {
			// TODO: handle exception
			System.out.print("转换失败,请输入合法数据!");
			System.exit(-1);
		}
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值