编程论坛
注册
登录
编程论坛
→
C++教室
发个话题大家讨论讨论(数的进制转换)
promising
发布于 2010-02-22 10:03, 587 次点击
将一个N进制数转换成M进制数。(Kingsoft金山公司C/C++笔试题)
5 回复
#2
秀痘魔导士
2010-02-22 15:50
程序代码:
#include
<iostream>
#include
<vector>
using
namespace
std;
void
convert(
int
x,
int
n,
int
m)
{
vector vi;
int
y;
while
(x)
{
y = x % m;
vi.push_back(y);
x /= m;
}
vector::reverse_iterator rit = vi.rbegin();
for
( ; rit!=vi.rend(); rit )
{
if
( *rit >=
10
)
{
char
temp = *rit -
10
'
A
'
;
cout
<< temp;
}
else
{
cout
<< *rit;
}
}
}
void
convert(
const
char
*str,
int
n,
int
m)
{
if
(*str ==
'
\0
'
)
return
;
int
x =
0
;
int
y;
while
(*str !=
'
\0
'
)
{
x *= n;
if
((*str>=
'
0
'
) && (*str<=
'
9
'
))
{
y = *str -
'
0
'
;
}
else
if
( (*str>=
'
A
'
) && (*str<=
'
F
'
) )
{
y =
10
*str -
'
A
'
;
}
else
if
( (*str>=
'
a
'
) && (*str<=
'
f
'
) )
{
y =
10
*str -
'
a
'
;
}
else
{
cout
<<
"
error input
"
<< endl;
return
;
}
if
( y>=n )
//
n进制数字不能大于n
{
cout
<<
"
error input
"
<< endl;
return
;
}
x = y;
str ;
}
convert(x, n , m);
}
int
main
(
void
)
{
convert(
1234
,
10
,
16
);
return
0
;
}
[
本帖最后由 秀痘魔导士 于 2010-2-22 15:51 编辑
]
#3
promising
2010-02-22 16:40
vc6.0编译出错
代码还看不懂,能不能不用#include <vector>。
这段代码,实现M和N是任意进制吗?
#4
秀痘魔导士
2010-02-25 09:14
以下是引用
promising
在2010-2-22 16:40:23的发言:
vc6.0编译出错
代码还看不懂,能不能不用#include 。
这段代码,实现M和N是任意进制吗?
这年头还有人用VC6.0开发的?
#5
promising
2010-02-25 13:26
懒得换,但这不是重点。
#6
cnfarer
2010-02-26 22:18
由于是任意进制,所以数值用字符串处理.调用时,没有检查输入参数是否合乎N进制的要求.
convert()中,num为输入参数,num2输出参数 x输入数的进制,y输出数的进制.(大于10进制的数用A表示10,B表示11,依次类推)
程序代码:
#include
<iostream>
void
convert(
char
* num,
int
x,
int
y,
char
*num2)
{
__int64
n;
int
i,m;
char
a[
16
];
char
*p=a;
n=(*num>=
'
A
'
?*num-
'
A
'
+
10
:*num-
'
0
'
);num++;
while
(*num)
{
n=n*x+(*num>=
'
A
'
?*num-
'
A
'
+
10
:*num-
'
0
'
);
num++;
}
for
(m=
0
;n>y ;m++ )
{
i=n%y;
*p++=(i<
10
?
'
0
'
+i:
'
A
'
+i-
10
);
n=n/y;
}
*p=(n<
10
?
'
0
'
+n:
'
A
'
+n-
10
);
m=
0
;
while
(p>=a)
{
*num2++=*p--;
}
*num2=
'
\0
'
;
return
;
}
int
main()
{
char
s[
16
];convert(
"
AB
"
,
16
,
10
,s);
printf(
"
%s\n
"
,s);
return
0
;
}
1