void main()
{
int n,m,i,j,flag
int s[100]
long number
char bin[16]="0123456789ABCDEF"
char digit[100]
printf("---本程序支持2到16进制任意转换---\n")
printf("A:10 B:11 C:12 D:13 E:14 F:15\n")
while(1) //判断输入的数是不是2到16范围
{
printf("请选择你将要输入的数的进制(2到16):")
scanf("%d",&n)
if(n>=2&&n<=16)
break
else
printf("输入错误……\n")
}
do //判断输入的数符不符合先前选择的进制,并把该数转换为10进制
{
number=0
printf("请输入该数(数字范围0到%c):",bin[n-1])
scanf("%s",digit)
for(i=0digit[i]!='\0'i++)
{
flag=0
for(j=0j<16j++)
{
if(digit[i]==bin[j])
{
flag=1
break
}
}
if(flag==1&&j<n)
number=number*n+j
else
{
printf(">>>输入的数不合法>>>\n")
flag=0
break
}
}
}while(flag==0)
printf("请输入要转换的进制:")
scanf("%d",&m)
printf("转换完成>>>\n %2d进制数:%s\n=>%2d进制数:",n,digit,m)
j=0
while(number!=0) //把10进制数number转换为 m 进制
{
s[j]=number%m
number=number/m
j++
}
for(i=j-1i>=0i--)
printf("%c",bin[s[i]])
printf("\n")
}
除法,比如16换成二进制16/2的8余0。继续,8除2的4余0,继续,4除2的2余0,继续,2除2的1。然后把刚才的余数倒着写出来,最后的一个不算,1留着就是1000。其实应该用短除法公式写给你,不好编辑。若写的不够明白,加QQ974430914详细说