用C编写代码 M进制转换成N进制
发布网友
发布时间:2022-04-22 02:29
我来回答
共1个回答
热心网友
时间:2023-09-26 10:46
说的太广泛了,要求不明确,如果不是你想要的,还白做。
是否支持负数?
什么形式输入,什么形式的输出?以字符串表示?
如果你有所谓的20进制,16,17,18,19怎么表示?g,h,i?
下面这个程序支持2进制到16进制之间正整数的转换
#include
<stdio.h>
#include
<stdlib.h>
#include
<string.h>
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;
}
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(10,in,2,out))
printf("%s->%s\n",in,out);
else
printf("illegal
input
data\n");
system("pause");
return
0;
}