package com.zf.s2;
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) {//判断传入的是否是十六进制
subString = sixteenCharToNumber(subString);//将字母转换成数字
}
result += Integer.parseInt(subString)//返回转换的结果
-
Math.pow(beforeConversion, number.length() - i - 1);
}
return (int) result;
}
public static String TenToNumber(int afterConversion,String number) {//十进制转成其他进制
int current = Integer.parseInt(number);//将字符串转换成整数
String opResult = "";
if(afterConversion==16){//判断转换后的数制是否是16进制
while(current>=afterConversion){//判断传入的数是否大于16,大于则逢16进一
opResult+=sixteenNumberToChar(current%afterConversion);//将数字转换成字母
current/=afterConversion;
}
if(current!=0)opResult+=sixteenNumberToChar(current);//最终余数
}else{
while(current>=afterConversion){//判断传入的值是否大于转换后的数制
opResult+=current%afterConversion;
current/=afterConversion;
}
if(current!=0)opResult+=current;//最终余数
}
String riResult = "";//倒序二进制字符串
for(int i=opResult.length()-1;i>=0;i--){//根据二进制的转换方式进行循环输出
riResult = 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);
return c;
}
public static void main(String []args){//java程序的主入口处
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, temp));//十进制转换成其它进制 }else{ result=String.valueOf(TenToNumber(afterConversion, number));//十进制转换成其它进制 } System.out.println(beforeConversion+"进制的数:"+number+",转换成"+afterConversion+"进制的数为:"+result); } catch (Exception e) { System.out.print("转换失败,请输入合法数据!"); System.exit(-1);//所有程序(方法,类等)停止,系统停止运行 } } }