Paste_Image.png
package sdf.sdf.df;
import java.util.Scanner;
public class play {
public static int ZhuanToTen(int a, String str) { // 其它進(jìn)制轉(zhuǎn)成十進(jìn)制
double d = 0; // 聲明轉(zhuǎn)換后的數(shù)值
String subString;
// 根據(jù)字符串的長(zhǎng)度循環(huán)獲得單個(gè)元素
for (int i = 0; i < str.length(); i++) {
subString = str.substring(i, i + 1); // 將字符串按循環(huán)截取
if (a == 16) { // 判斷是否是十六進(jìn)制
subString = sixteenToNumber(subString); // 將字母轉(zhuǎn)換成數(shù)字
}
d += Integer.parseInt(subString) // 返回轉(zhuǎn)換的結(jié)果
* Math.pow(a, str.length() - i - 1);
}
return (int) d;
}
public static String TenToNumber(int a, String str) { // 十進(jìn)制轉(zhuǎn)成其他進(jìn)制
int current = Integer.parseInt(str); // 將字符轉(zhuǎn)換成整數(shù)
String opResult = "";
// 判斷轉(zhuǎn)換后的數(shù)制是否是16進(jìn)制
if (a == 16) {
// 判斷傳入的數(shù)是否大于16缀旁,大于則逢16進(jìn)一
while (current >= a) {
opResult += sixteenNumberToChar(current % a);// 將數(shù)字轉(zhuǎn)換成字母
current /= a;
}
if (current != 0)
opResult += sixteenNumberToChar(current);
} else {
// 判斷傳入的值是否大于轉(zhuǎn)換后的數(shù)制
while (current >= a) {
opResult += current % a;
current /= a;
}
if (current != 0)
opResult += current;
}
String riResult = ""; // 倒序二進(jìn)制字符串
// 根據(jù)二進(jìn)制的轉(zhuǎn)換方式進(jìn)行循環(huán)輸出
for (int i = opResult.length() - 1; i >= 0; i--) {
riResult = riResult + opResult.substring(i, i + 1);
}
return riResult;
}
public static String sixteenToNumber(String s) { // 十六進(jìn)制字母對(duì)應(yīng)數(shù)字
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) { // 十六進(jìn)制數(shù)字對(duì)應(yīng)字母
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; // 要轉(zhuǎn)換的數(shù)
int a, b; // a表示轉(zhuǎn)換前的進(jìn)制椰拒,b表示轉(zhuǎn)換后的進(jìn)制
String result = ""; // 經(jīng)過(guò)數(shù)制轉(zhuǎn)換后的結(jié)果
String stop = "";
Scanner read = new Scanner(System.in); // 得到用戶輸入的值
do {
System.out.println("輸入三個(gè)整數(shù):待轉(zhuǎn)換的數(shù)據(jù) 要轉(zhuǎn)換之前的進(jìn)制 要轉(zhuǎn)換后的進(jìn)制");
number = read.next();
a = read.nextInt();
b = read.nextInt();
stop = "Quit";
} while (stop != "Quit");
try {
if (a != 10) { // 判斷轉(zhuǎn)換前的數(shù)制是否是十進(jìn)制
String temp = String.valueOf(ZhuanToTen(a, number)); // 轉(zhuǎn)換成十進(jìn)制的數(shù)
result = String.valueOf(TenToNumber(b, temp)); // 十進(jìn)制轉(zhuǎn)換成其它進(jìn)制
} else {
result = String.valueOf(TenToNumber(b, number)); // 十進(jìn)制轉(zhuǎn)換成其它進(jìn)制
}
System.out.println(a + "進(jìn)制的數(shù):" + number + ",轉(zhuǎn)換成" + b + "進(jìn)制的數(shù)為:"
+ result);
} catch (Exception e) {
System.out.print("轉(zhuǎn)換失敗,請(qǐng)正確輸入蔚出!");
System.exit(-1);
}
}
}