链接:进制转换__牛客网
来源:牛客网
[编程题]进制转换
- 热度指数:45618 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
给定一个十进制数 M ,以及需要转换的进制数 N 。将十进制数 M 转化为 N 进制数。
当 N 大于 10 以后, 应在结果中使用大写字母表示大于 10 的一位,如 'A' 表示此位为 10 , 'B' 表示此位为 11 。
若 M 为负数,应在结果中保留负号。
数据范围: M<=108,2≤N≤16M <= 10^8 , 2 \le N \le 16M<=108,2≤N≤16
要求:空间复杂度O(M)O(M)O(M),时间复杂度 O(M)O(M)O(M)
示例1
输入
7,2输出
"111"示例2
输入
10,16输出
"A"
除2取余,逆序排列 ,s2是取余得到的结果,是逆序的,str是对s2逆序排列得到的结果
- 使用s2全部代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int M = scanner.nextInt();
int N = scanner.nextInt();
boolean flag = true;
if (M < 0){
M = -M;
flag = false;
}
String s1 = "0123456789ABCDEF";
String s2 = "";
String str = "";
// 除2取余,逆序排列
while ((M / N) != 0){
s2 = s2 + s1.charAt(M % N);
M /= N;
}
s2 = s2 + M%N;
for (int i = s2.length()-1; i >= 0; i--) {
str = str + s2.charAt(i);
}
if (flag == false){
str = "-"+str;
}
System.out.println(str);
}
}
- 不使用s2,直接使用str逆序输出
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int M = scanner.nextInt();
int N = scanner.nextInt();
boolean flag = true;
if (M < 0){
M = -M;
flag = false;
}
String s1 = "0123456789ABCDEF";
String str = "";
// 除2取余,逆序排列
while ((M / N) != 0){
str = str + s1.charAt(M % N);
M /= N;
}
str = str + M%N;
if (flag == false){
System.out.print("-");
for (int i = str.length()-1; i >= 0; i--) {
System.out.print(str.charAt(i));
}
}else {
for (int i = str.length() - 1; i >= 0; i--) {
System.out.print(str.charAt(i));
}
}
}
}