您的位置:首页 > 其它

进制转换问题求解

2012-10-07 11:18 232 查看
 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/**
* 总体思想:采用一个数组存放基数"0123456789ABCDEF"
* 即数字的每一位由上述数组的元素组成
* 如一个数表示为"15F",则该数字实际为:1 5 15
* 这样的话处理进制转换问题就和大整数运算问题一样了。
*/
//将数字转换为字符串形式
int N2Str(int value,int N,char *str)
{
char temp[10],*Bits="0123456789ABCDEF";
int Len;
if(value<0||N<2||N>16||str==NULL) return 0;
if(value>=N)
{//递归按位转换
if(!N2Str(value/N,N,str)) return 0;
}

Len=strlen(str);
str[Len]=Bits[value%N];
str[Len+1]='\0';
return 1;
}

//M进制转换为N进制
int M2N(int M,char *MStr,int N,char *NStr)
{
int value=0,bit;
if(M<2||M>16||MStr==NULL||N<2||N>16||NStr==NULL) return 0;
while(*MStr)
{//该过程类似于大整数运算的运算进位减位问题
value*=M;
if(*MStr>='0'&&*MStr<='9') bit=*MStr-'0';
else if(*MStr>='a'&&*MStr<='f') bit=*MStr-'a'+10;
else if(*MStr>='A'&&*MStr<='F') bit=*MStr-'A'+10;
if(bit>=M) return 0;
value+=bit;
MStr++;
}

*NStr='\0';
N2Str(value,N,NStr);
return 1;
}

int main(void)
{
char *in="123456";
char out[50];

if(M2N(8,in,16,out))
printf("%s->%s\n",in,out);
else
printf("illegal input data\n");

system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: