m进制转换为n进制-任意进制转换算法
来源:互联网 发布:淘宝卖家怎么开通微淘 编辑:程序博客网 时间:2024/05/01 11:53
【转自】——http://www.cnblogs.com/pkuoliver/archive/2010/10/27/Convert-m-number-to-n-number.html
这种题也是一道经典的面试题,主要考察进制转换细想,Coding质量等。 当我们把十进制转成二进制的时候,我们通过辗转相除,取余,逆置余数序列的过程得到新的进制的数。因此我们可以借助这种思想把M进制转成N进制的数。 如下是C的详细的实现方法 观察上面的代码,存在着众多的不足。例如,要对输入参数做检查,数值的大小收到int值最大值的限制等。不过好在一点,该算法的时间复杂度是O(n)的。 我们霹雳无敌的赵大叔又提供了一种用Java实现的通用的进制转换方法,即使Windows的计算器也转不了的大数,这个算法也可以转。算和上面的算法相比,他的基本思想不变,还是辗转除,但是用了字符串做大数相除,很不错的创新点,赞一个。代码如下: 赵大叔的算法好了不少,除了参数检查,大小写之外都很好。值得我们借鉴。 01
void
m2n(
int
m,
char
* mNum,
int
n,
char
* nNum)
02
{
03
int
i = 0;
04
char
c, *p = nNum;
05
06
//这是一个考察地方,是否能用最少乘法次数。
07
while
(*mNum !=
'/0'
)
08
i = i*m + *mNum++ -
'0'
;
09
10
//辗转取余
11
while
(i) {
12
*p++ = i % n +
'0'
;
13
i /= n;
14
}
15
*p-- =
'/0'
;
16
17
//逆置余数序列
18
while
(p > nNum) {
19
c = *p;
20
*p-- = *nNum;
21
*nNum++ = c;
22
}
23
}
01
package
test;
02
03
/**
04
* 功能:将一个数从M进制转换成N进制
05
* MValue:M进制数的字符串表示方法
06
* Shang:保存中间运算结果
07
* M:M进制
08
* N:N进制
09
*/
10
public
class
M2N {
11
// 在这里对输入赋值
12
public
static
String MValue =
"1231412423534674574757"
;
13
public
static
String Shang =
null
;
14
public
static
int
M =
10
;
15
public
static
int
N =
8
;
16
17
public
static
void
main(String[] args) {
18
String nValue =
""
;
19
Shang = MValue;
20
while
(Shang.length() >
0
) {
21
nValue = qiuyu(Shang) + nValue;
22
}
23
System.out.println(nValue);
24
}
25
26
/**
27
* 功能:对给定的M进制字符串对n求余。
28
*
29
* @param MTempValue
30
* @param m
31
* @param n
32
* @return
33
*/
34
public
static
String qiuyu(String MTempValue) {
35
Shang =
""
;
36
int
temp =
0
;
37
while
(MTempValue.length() >
0
) {
38
int
t = getIntFromStr(MTempValue.substring(
0
,
1
));
39
MTempValue = MTempValue.substring(
1
);
40
temp = temp * M + t;
41
Shang += getStrFromInt(temp / N);
42
temp = temp % N;
43
}
44
while
(Shang.length() >
0
&& Shang.charAt(
0
) ==
'0'
){
45
Shang = Shang.substring(
1
);
46
}
47
return
getStrFromInt(temp);
48
}
49
50
public
static
int
getIntFromStr(String str){
51
return
str.charAt(
0
) <=
'9'
&& str.charAt(
0
) >=
'0'
?
52
str.charAt(
0
) -
'0'
: str.charAt(
0
) -
'a'
+
10
;
53
}
54
55
public
static
String getStrFromInt(
int
value){
56
String result =
null
;
57
if
(value>=
0
&& value<=
9
)
58
result = String.valueOf((
char
)(
'0'
+ value));
59
else
if
(vlaue >
9
&& value <
36
)
60
{
61
result = String.valueOf((
char
)(
'a'
+ value -
10
));
62
}
63
else
64
{
65
result =
"-1"
;
// 出错误了
66
}
67
return
result;
68
}
69
}
- m进制转换为n进制-任意进制转换算法
- m进制转换为n进制-任意进制转换算法
- m进制转换为n进制-任意进制转换算法
- m进制转换为n进制-任意进制转换算法
- m进制转换为n进制
- m进制转n进制(任意进制转换)
- 编程练习:M,N进制任意转换
- 数的进制转换算法-m进制到n进制
- n、m进制转换
- 任意整数转换为任意进制
- m进制转换为n进制的问题
- 任意进制转换算法
- 任意进制转换算法
- HDU 1335 (16进制以下)把m进制转换为n进制
- 十进制转换为任意进制
- 任意进制转换为十进制
- C++十进制转换为任意进制
- 10进制转换为n进制
- ARM-Linux开机自启动设置
- 轻博客以及其优越性
- xp下安装DNS的简单方法
- 英特尔为PC芯片添加全新休眠功能
- 获取当前物理输出设备的类型
- m进制转换为n进制-任意进制转换算法
- count,group by,having(SQL)
- android meta-data 使用详解
- [转载]stagefright框架(四)-Video Buffer傳輸流程
- 企业发展浅析
- 英特尔打造“ultrabooks”和2013Haswell酷睿处理器
- 如何设置vim?让它显示行号/语法高亮/自动缩进
- MySQL 学习笔记 一
- oracle网络服务端配置