进制转换:十进制数转十六进制数
问题描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
给出一个非负整数,将它表示成十六进制的形式。
代码描述(一)
#include <stdio.h>
int main()
{
int n,i,j=0;
char a[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//*创建一个十进制与十六进制对应的数组,并对其赋值*//
char b[32];//*存放已转换好的十六进制的数组长度未知,自定义的长度32*//
scanf("%d",&n);
while(n>=16)
{
i=n%16;
b[j]=a[i];
j++;//*新的数组的下标移位*/
n=n/16;
}//*该while循环体的作用是把n大于16的数转换十六进制数再依次输入新的数组中*//
if(n<16)
b[j]=a[n];
//*注意:此时数组b[]内的十六进制数是倒过来存储的*//
while(j>=0)
{
if(j>0)//*判断是不是最后一个,不是的话输出,是的话直接换行*//
printf("%c",b[j]);
else
printf("%c\n",b[j]);
j--;
}
return 0;
}
代码描述(二)
#include <stdio.h>
int main()
{
int n, i, j = 0;
char a[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
char b[32];
scanf("%d", &n);
if (n ==0)
printf("0\n");
while (n)
{
i = n % 16;
b[j] = a[i];
++j;
n = n / 16;
}
for (i = j; i > 0; i--)
printf("%c", b[i-1]);
printf("\n");
return 0;
}