描述
给定一个十进制数 M ,以及需要转换的进制数 N 。将十进制数 M 转化为 N 进制数。
当 N 大于 10 以后, 应在结果中使用大写字母表示大于 10 的一位,如 'A' 表示此位为 10 , 'B' 表示此位为 11 。
若 M 为负数,应在结果中保留负号。
数据范围: M <= 10^8 , 2 \le N \le 16M<=108,2≤N≤16
要求:空间复杂度O(M)O(M),时间复杂度 O(M)O(M)
备注:M是32位整数,2<=N<=16.
示例
输入: 7,2
输出:"111"
分析:
1.m=0,直接返回0
2.先举例写出所有进制需要的字符 0123456789ABCDEF
3.分别有两种情况:m > 0 和 m < 0
4.
代码:
import java.util.*;
public class Main{
public static String func(int m,int n){
if(m==0)return "0";
String s="0123456789ABCDEF";
StringBuffer sb=new StringBuffer();
if(m>0){
while(m!=0){
int i=m%n;
sb.append(s.charAt(i));
m/=n;
}
}else{
m=-m;
while(m!=0){
int i=m%n;
sb.append(s.charAt(i));
m/=n;
}
sb.append("-");
}
return sb.reverse().toString();
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int[] arr=new int[2];
for(int i=0;i<2;i++){
arr[i]=sc.nextInt();
}
System.out.println(func(arr[0],arr[1]));
}
}