#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int dec2hex(int n);
int n = 0;
printf("输入一个十进制整数:");
scanf("%d",&n);
printf("对应的十六进制数:");
dec2hex(n);
system("pause");
return 0;
}
int dec2hex(int n)
{
char SL[200] = { '\0' };
int yushu = 0, i = 0;
do
{
n = n / 16;
yushu = n % 16;
if (yushu > 9)
{
switch (yushu)
{
case 10:SL[i] = 'A'; break;
case 11:SL[i] = 'B'; break;
case 12:SL[i] = 'C'; break;
case 13:SL[i] = 'D'; break;
case 14:SL[i] = 'E'; break;
case 15:SL[i] = 'F'; break;
case 16:SL[i] = 'G'; break;
default:
break;
}
}
else
{
SL[i] = yushu;
}
i++;
}
while (n > 0);
for (i = i - 1; i != 0; i--)
{
printf("%c", SL[i]);
}
printf("\n");
return 0;
}
int dec2hex(int n)
{
char SL[200] = { '\0' };
int yushu = 0, i = 0;
do
{
yushu = n % 16; //先%16 再/16
n = n / 16;
if (yushu > 9)
{
switch (yushu)
{
case 10:SL[i] = 'A'; break;
case 11:SL[i] = 'B'; break;
case 12:SL[i] = 'C'; break;
case 13:SL[i] = 'D'; break;
case 14:SL[i] = 'E'; break;
case 15:SL[i] = 'F'; break; //截至到15就行啦
default:
break;
}
}
else
{
SL[i] = yushu+48; //需要加48 因为你的数组是char类型,'1'=(char)(1+48)
}
i++;
} while (n > 0);
for (i = i - 1; i >= 0; i--) // i>=0 你的SL[0]也是有数据的
{
printf("%c", SL[i]);
}
printf("\n");
return 0;
}
修改三处地方。
n = n / 16;
yushu = n % 16;
这两句有问题啊,假设n = 18,那么n=n/16后,n就变成1了,那么yushu就是1,实际你要的yushu应该是2,原因是n=n/16改变了n的值啊
改为:
yushu = n%16;
n=n/16;
printf打印不出来的原因是你用%c,ASCII码中'0'是0x30,小于这个数,为不可见字符,所以你看不到
C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html