#include<stdio.h>
void hex(int );/*函数原型声明*/
/*主函数，打印控制菜单，并按用户输入调用功能函数*/
main()
{ 
int a;
/*打印控制菜单*/
 do
 { 
printf("\n0、退出\n1、十进制->二进制\n2、十进制->八进制\n3、十进制->十六进制\n");
  printf("\n请选择(0~3)：");
  fflush(stdin);/*清除设备缓存*/
  scanf("%d",&a);
  switch(a)
  {   
case 0:printf("\n退出程序！\n");
    break;   
case 1:hex(2);/*十进制转二进制*/
    break;
   case 2:hex(8);/*十进制转八进制*/
    break;
   case 3:hex(16);/*十进制转十六进制*/
    break;
default:printf("\n输入错误！\n");
 }
 }while(a);
}
/*功能函数，根据参数不同实现进制转换*/
void hex(int s)/*参数为 s，即要转换的目标进制数*/
{ 
int p[10],count,k,i;
 int num;
 k=s;/*目标进制数存入k*/
  /*输入要转换进行转换的数据*/
 printf("\n请输入一个十进制整数：");
 scanf("%d",&num);
 count=0;/*控制p数组位置用*/
 while(num!=0)/*商不为0则继续转换*/
 {  
p[count]=num%k;/*获得一个余数，将余数存入p 数组*/
  num=num/k;/*将要转换的数据替换为该数据与相应进制的商值，num、k均为整数*/
 /*转换为十六进制，如果余数在10-15之间，则需要将其转换为相应的字母*/
if(p[count]>=10)
  {   
if(p[count]==10)
   p[count]='A';
   else
   p[count]='A'+(p[count]-10);
  }

  count++;/*数组位置增 1 */
 }

/*转换结果输出，也就是数组倒序输出*/
 printf("\n转换为 %d 进制：",k);
 for(i=count-1;i>=0;i--)
 {  
if(p[i]>=10)
    printf("%c",p[i]);  
else   
printf("%d",p[i]);
 }
 printf("\n");
}
