版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41221623/article/details/79605093
思路:先将输入的十进制数除以16得到商和余数,再将得到的商继续除以16得到商和余数,以此类推直到商为0为止,然后将所得余数顺序存入一个数组,再将这个数组倒序通过switch语句依次转成十六进制数存入一个字符串数组,最后顺序输出即可。
代码如下:
#include <stdio.h>
#include <stdlib.h>
/*
* 十进制数转换成十六进制数
* 作者:踏歌行
* 日期:2018-3-18
**/
int main()
{
int n; //输入的十进制数
int i;
int index = 0; //记录输入的十进制数的长度
int len = 0; //记录十六进制数组的长度
int remainder[200]; //存储余数
char sixteen[200]; //存储转换后的十六进制数
scanf("%d",&n);
if(n == 0)
{
remainder[0] = 0;
index++;
}
else
{
for(i = 0; n > 0; i++)
{
remainder[i] = n % 16;
n /= 16;
index++;
}
}
for(i = index - 1; i >= 0; i--)
{
switch(remainder[i])
{
case 0:
sixteen[len++] = '0';
break;
case 1:
sixteen[len++] = '1';
break;
case 2:
sixteen[len++] = '2';
break;
case 3:
sixteen[len++] = '3';
break;
case 4:
sixteen[len++] = '4';
break;
case 5:
sixteen[len++] = '5';
break;
case 6:
sixteen[len++] = '6';
break;
case 7:
sixteen[len++] = '7';
break;
case 8:
sixteen[len++] = '8';
break;
case 9:
sixteen[len++] = '9';
break;
case 10:
sixteen[len++] = 'A';
break;
case 11:
sixteen[len++] = 'B';
break;
case 12:
sixteen[len++] = 'C';
break;
case 13:
sixteen[len++] = 'D';
break;
case 14:
sixteen[len++] = 'E';
break;
case 15:
sixteen[len++] = 'F';
break;
}
}
for(i = 0; i < len; i++)
{
printf("%c",sixteen[i]);
}
printf("\n");
return 0;
}