题目:
思路:求余、求商,倒序排放,switch语句
在写好字符转换函数dtoc()的前提下,想到,给定值可以以16为界分为两部分,因此需要判断num < 16? 如果小于16,可直接打印结果;大于等于16,则需要求余求商,此时判断条件变为:商是否大于等于16(另一种说法:是否大于15),如果大于15,则需要一直求商,直至商小于16,在此期间,将所有的商(转换后的商)依次放到定义的字符数组。最后将商转换后放到数组中。循环打印数组中字符。
代码:
运行环境:Code::Blocks 20.03
#include <stdio.h>
//该函数时为了将1-15转换为字符;
char dtoc(int a)
{
char i;
switch(a)
{
case 0: i = '0';
break;
case 1: i = '1';
break;
case 2: i = '2';
break;
case 3: i = '3';
break;
case 4: i = '4';
break;
case 5: i = '5';
break;
case 6: i = '6';
break;
case 7: i = '7';
break;
case 8: i = '8';
break;
case 9: i = '9';
break;
case 10: i = 'A';
break;
case 11: i = 'B';
break;
case 12: i = 'C';
break;
case 13: i = 'D';
break;
case 14: i = 'E';
break;
default: i = 'F';
break;
}
return i;
}
int main(void)
{
int i, j;
unsigned long int num;
char hs[10];
scanf("%d", &num);
if(num <16) //判断num是否大于等于16,如果小于16,可直接打印出结果;
{
hs[0] = dtoc(num);
printf("%c", hs[0]);
return 0;
}
while(num > 15) //如果给定值大于15,则求余,并放到数组hs[]中,且求出商;循环计算,直到商小于等于15
hs[i] = dtoc(num%16);
num = num / 16;
i++;
}
hs[i] = dtoc(num);//将最后的商放到数组hs[]中;
for(j = i; j >= 0; j--) //循环打印hs[]中的元素,注意:hs[]中元素为逆序排放
{
printf("%c", hs[j]);
}
return 0;
}
/*菜鸟一枚,请多指教*/
End