进制转换
描述
给定一个十进制数 M ,以及需要转换的进制数 N 。将十进制数 M 转化为 N 进制数。当 N 大于 10 以后, 应在结果中使用大写字母表示大于 10 的一位,如 'A' 表示此位为 10 , 'B' 表示此位为 11 。若 M 为负数,应在结果中保留负号。方法一(递归)
思路分析
本题需要将十进制M数转换为N进制,接着我们通过几个例子对其进行分析:
- 我们首先分析N=2,M=10的情况,如果我们需要将十进制数10转换为二进制数,我们要做的就是不断的将10对2进行整除,直到商小于2,并且记录所有的余数,之后将所有的余数逆序输出即可得到十进制数转换为二进制数。
- 我们分析当N=8,M=1000的情况,如果我们需要将十进制数1000转换为八进制数,我们要做的就是不断的将1000对8进行整除,直到商小于8,并且记录所有的余数,之后将所有的余数逆序输出即可得到十进制数转换为八进制数。
- 我们分析当N=16,M=10000的情况,如果我们需要将十进制数10000转换为十六进制数,我们要做的就是不断的将10000对16进行整除,直到商小于16,并且记录所有的余数,之后将所有的余数逆序输出即可得到十进制数转换为十六进制数,需要注意的是我们需要将余数大于 10 的一位使用大写字母表示,例如10使用A表示等等。
通过分析我们得到一般性的结论十进制数在转换成任何进制数时,均为除其进制取余,因为中间过程涉及逆序输出,因此使用递归的办法比较有效。需要注意的是当M小于0时,对其取负进行计算,最后增加负号即可。
图解
思路分析中的图解如下:
核心代码
import java.util.*;
public class Solution {
/**
* 进制转换
* @param M int整型 给定整数
* @param N int整型 转换到的进制
* @return string字符串
*/
static String s=new String();
public static void convert(int n,int b) {
if(n>0)
{
switch(n%b) {
case 10:s="A"+s;break;
case 11:s="B"+s;break;
case 12:s="C"+s;break;
case 13:s="D"+s;break;
case 14:s="E"+s;break;
case 15:s="F"+s;break;
default:s=String.valueOf(n%b)+s;
}
}
if(n!=0) {
convert(n/b,b);
}
}
public String solve (int M, int N) {
// write code here
int index=1;//判断正负数标志
if(M<0)
{
M=-M;
index=-1;
}
convert(M,N);
if(index==-1) s="-"+s;
return s;
}
} 复杂度分析
- 时间复杂度:对M不断的整除N,因此时间复杂度为
。
- 空间复杂度:该算法使用递归操作,递归过程中使用栈,栈空间为
,因此时间复杂度为
方法二+迭代
思路分析
方法二是对方法一的改变,将递归过程转换为迭代过程,即不断的对M进行整除,然后将余数再次赋值给M,迭代的思想更易理解。
核心代码
import java.util.*;
public class Solution {
/**
* 进制转换
* @param M int整型 给定整数
* @param N int整型 转换到的进制
* @return string字符串
*/
static String s=new String();
public static void convert(int n,int b) {
while(n>0)
{
switch(n%b) {
case 10:s="A"+s;break;
case 11:s="B"+s;break;
case 12:s="C"+s;break;
case 13:s="D"+s;break;
case 14:s="E"+s;break;
case 15:s="F"+s;break;
default:s=String.valueOf(n%b)+s;
}
n=n/b;
}
}
public String solve (int M, int N) {
// write code here
int index=1;//判断正负数标志
if(M<0)
{
M=-M;
index=-1;
}
convert(M,N);
if(index==-1) s="-"+s;
return s;
}
} 复杂度分析 - 时间复杂度:对M不断的整除N,因此时间复杂度为
。
- 空间复杂度:程序必要的空间为存储生成的N进制数,与方法一不同,因此空间复杂度$O(1)$

京公网安备 11010502036488号