进制转换
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);
}
}
}