用C语言设计一个程序:要求能把十进制转换为任意进制(2,8,16)

2024-11-12 13:57:00
推荐回答(1个)
回答1:

#include
void dectobin(unsigned int number);
void dectooct(unsigned int number);
void dectohex(unsigned int number);
void convert(unsigned int number,int n);
void main()
{
unsigned int number;
int n;
printf("请输入带转换的十进制数:\n");
scanf("%u",&number);
while(getchar()!='\n')
continue;
printf("想转换为多少进制?(2、8或者16?)\n");
scanf("%d",&n);
convert(number,n);
}
void convert(unsigned int number,int n)
{//函数功能,把number从十进制转换为n进制数,n为2,8或者16
if(n!=2&&n!=8&&n!=16)
printf("此程序只能转换为2,8或者16进制的数值");
else if(n==2)
dectobin(number);
else if(n==8)
dectooct(number);
else
dectohex(number);

}
void dectobin(unsigned int number)
{//函数功能,把十进制数number转换为二进制数
int a[20];
int i=0;
int j;
while(number)
{
a[i]=number%2;
number=number/2;
i++;
}
for(j=i-1;j>=0;j--)
printf("%d",a[j]);
}
void dectooct(unsigned int number)
{//函数功能,把十进制数number转换为八进制数
int a[20];
int i=0;
int j;
while(number)
{
a[i]=number%8;
number=number/8;
i++;
}
printf("0"); //在数字前打印一个八进制前缀0
for(j=i-1;j>=0;j--)
printf("%d",a[j]);
}
void dectohex(unsigned int number)
{//函数功能,把十进制数number转换为十六进制数
char a[20];
int i=0;
int j;
while(number)
{
a[i]=number%16;
if(a[i]>9)
switch(a[i])
{
case 10:a[i]='a';break;
case 11:a[i]='b';break;
case 12:a[i]='c';break;
case 13:a[i]='d';break;
case 14:a[i]='e';break;
case 15:a[i]='f';break;
}
number=number/16;
i++;
}
printf("0x"); //在数字前打印一个八进制前缀0x
for(j=i-1;j>=0;j--)
printf("%c",a[j]);
}