要求:把一个十进制 M 数转化成 N 进制且 2 <= N <= 16。
思路:用一个 flag 变量记录数的正负,用 StringBuffer 类来存储结果,为了处理十以上的进制,定义一个字符串即:0123456789ABCDEF,通过 M % N 来作为输出数字字符的索引,最后逆置转字符串作为输出。
具体实现代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] str = sc.nextLine().split(" ");
int M = Integer.parseInt(str[0]);
int N = Integer.parseInt(str[1]);
System.out.println(solve(M,N));
}
public static String solve(int M,int N){
if(M == 0){
return "0";
}
boolean flag = true;
if(M < 0){
M = -M;
flag = false;
}
StringBuffer stringBuffer = new StringBuffer();
String str = "0123456789ABCDEF";
while(M != 0){
stringBuffer.append(str.charAt(M % N));
M = M / N;
}
return flag ? stringBuffer.reverse().toString() : "-" + stringBuffer.reverse().toString();
}
}