//程序供参考
#include
#include
//函数:reverse
//功能:反转字符串
//参数:
// str : 要进行反转的字符串
//返回值:无
void revease( char * str)
{
char * head = str; //指向字符串的头部第一个字符
char * tail = str + strlen( str ) - 1; //指向字符串的尾部最后一个字符
char tmp; //交换头尾字符时的临时变量
while( head < tail) //只要头部指针比尾部指针小
{
//交换头部指针和尾部指针字符
tmp = * head;
*head = *tail;
*tail=tmp;
//
head ++; //头部指针后移
tail--; //尾部指针前移
}
};
//函数:convert
//功能:将十进制数转成任意进制,并将结果通过通过参数返回
//参数:
// num:要转换的数字
// base:进制
// out:输出缓冲区,以字符串的形式返回转换后的数字
//返回值:true 成功,false 失败
bool convert( unsigned long num, unsigned long base,char * out)
{
char ch[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; //定义数码
char * p = out; //指向输出缓冲区的头部
unsigned long remain; //转换时用的变量,保存 余数
//如果进制超范围,返回false
if(base > 16 || 1 == base )
return false;
//数字除以基数,取余;结果除基数再取余,直到结果整数部分为0止
//把得到的余数倒转 即得到 对应的相应进制的数字
do
{
remain = num % base; //取一次相除的余数
num = num / base; //取一次相除的结果
*p = ch[remain]; //将余数对应的表示字符写到缓冲区
p++; //缓冲区后移
}while( num > 0); //直到结果整数部分为0止
*p = '\0'; //给输出缓冲的最后加个结束字符
revease( out ); //把输出缓冲区倒转
return true;
};
int main()
{
int i; //循环变量
int N; //个数
unsigned long num; //要转换的数
unsigned long base; //要转换成的进制
char outbuff[65]; //输出缓冲区,64位系统,long 最多64位,加一位放结束字符
printf("请输入要转换的十进制数个数 : ");
scanf("%ld",&N);
for(i = 1; i<= N;i++)
{
printf("第%3d个数及进制 : ",i);
scanf("%ld %ld",&num,&base);
if( convert( num,base,outbuff))
{
printf(" 要转换的数 : %ld\r\n",num);
printf(" 转换成%02ld数 : %s\r\n",base,outbuff);
}
else
printf("转换失败。\r\n");
}
getchar();
getchar();
}