| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 587 人关注过本帖
标题:发个话题大家讨论讨论(数的进制转换)
只看楼主 加入收藏
promising
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
帖 子:87
专家分:147
注 册:2009-8-31
结帖率:100%
收藏
已结贴  问题点数:40 回复次数:5 
发个话题大家讨论讨论(数的进制转换)
将一个N进制数转换成M进制数。(Kingsoft金山公司C/C++笔试题)

搜索更多相关主题的帖子: 话题 进制 
2010-02-22 10:03
秀痘魔导士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:250
专家分:1150
注 册:2009-12-23
收藏
得分:28 
程序代码:
#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 编辑 ]
2010-02-22 15:50
promising
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
帖 子:87
专家分:147
注 册:2009-8-31
收藏
得分:0 
vc6.0编译出错
代码还看不懂,能不能不用#include <vector>。
这段代码,实现M和N是任意进制吗?

向前走着……
2010-02-22 16:40
秀痘魔导士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:250
专家分:1150
注 册:2009-12-23
收藏
得分:0 
以下是引用promising在2010-2-22 16:40:23的发言:

vc6.0编译出错
代码还看不懂,能不能不用#include 。
这段代码,实现M和N是任意进制吗?
这年头还有人用VC6.0开发的?
2010-02-25 09:14
promising
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
帖 子:87
专家分:147
注 册:2009-8-31
收藏
得分:0 
懒得换,但这不是重点。

向前走着……
2010-02-25 13:26
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
由于是任意进制,所以数值用字符串处理.调用时,没有检查输入参数是否合乎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;
}

★★★★★为人民服务★★★★★
2010-02-26 22:18
快速回复:发个话题大家讨论讨论(数的进制转换)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016324 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved