注册 登录
编程论坛 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
promising2010-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
promising2010-02-25 13:26
懒得换,但这不是重点。
#6
cnfarer2010-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