进制转换
进制转换算法可以将m进制的整数mv转为n进制的整数nv。
本文的算法显然不是时间复杂度最优的算法,但是易于理解。
思路主要是:
m进制–> 10进制 —> n进制
m–>10
int num = 745; //需要转换的数
String value = num + "";
int temp = 0;
while (value.length() > 0) {
int i = Integer.parseInt(value.substring(0, 1));
value = value.substring(1);
temp = (int) (temp + i * Math.pow(8, value.length()));
}
System.out.println(temp);
m–>10算法是比较简单的,转成字符串之后,依次取出每个字符,乘以相对应的权重再求和即可。
10–>n
int num = 485; //需要转换的数
String result = "";
while (num > 8) {
result = num % 8 + result;
num = num / 8;
}
result = num + result;
System.out.println(result);
10–>n的算法大致是:
2456/8=307,余0;
307/8=38,余3;
38/8=4,余6;
4/8=0,余4。
将所有余数倒序相连,得到结果:4630。
m–>n算法
将以上两个过程结合,可以得到任意进制到任意进制之间的转换算法。
public void m2n(long v, int from, int to) {
String mValue = v + ""; //m进制的字符串
long temp = 0;//中间的十进制值
while (mValue.length() > 0) {
int i = Integer.parseInt(mValue.substring(0, 1));
mValue = mValue.substring(1);
temp = (long) (temp + i * Math.pow(from, mValue.length()));
}
String nValue = ""; //n进制字符串
while (temp > to) {
nValue = temp % to + nValue;
temp = temp / to;
}
nValue = temp + nValue;
System.out.println(nValue);
}