一、题目链接
http://noi.openjudge.cn/ch0113/01/
二、解题思路
三、实施步骤
四、Java程序
import java.util.Scanner;
public class Main {
/**
* 将给定a进制整数转换为对应的十进制整数
*
* @param num String类型的对象,代表给定a进制整数
* @param a int类型的整数,代表num所基于的进制
* @return int类型的整数,代表num对应的十进制整数
*/
public int toDecimalInteger(String num, int a) {
String str = num.toUpperCase(); // 将num中的字母变为大写字母
String ASystem = "0123456789ABCDEF"; // a进制系统基本数字表,下标对应十进制数值
int n = str.length();
int ans = 0; // num对应的十进制整数,初始时为0
/* 从左至右遍历str的每位数字 */
for (int i = 0; i < n; i++) {
char current = str.charAt(i); // 取str的当前数字
// 取当前数字在ASystem中的下标,根据进制计算规则求对应十进制数值,累加到ans上
ans = ans + (ASystem.indexOf(current)) * (int) Math.pow(a, n - i - 1);
}
return ans;
}
/**
* 将给定十进制整数转换为对应的b进制整数
*
* @param num int类型的整数,代表给定十进制整数
* @param b int类型的整数,代表转换后的整数所基于的进制
* @return String类型的对象,代表num对应的b进制整数
*/
public String toBSystem(int num, int b) {
if (num == 0) { // 如果num为0
return "0"; // 返回字符串0
}
StringBuilder ans = new StringBuilder(); // num对应的b进制整数
String BSystem = "0123456789ABCDEF"; // b进制系统基本数字表,下标对应十进制数值
/* 根据进制计算规则,将num转为b进制整数 */
while (num != 0) {
ans.append(BSystem.charAt(num % b)); // 根据num对b的余数,找出对应b进制系统基本数字,追加到ans上
num = num / b; // 将num缩小b倍
}
return ans.reverse().toString(); // 将ans反转后返回它的String形式
}
public static void main(String[] args) {
Main test = new Main();
Scanner input = new Scanner(System.in);
int a = input.nextInt();
String text = input.next();
int b = input.nextInt();
System.out.print(test.toBSystem(test.toDecimalInteger(text, a), b));
}
}