用C语言,编写一个程序,不使用格式控制符 %x 的情况下,将十进制数转换为十六进制。
有两种方法:递归或者循环
方法一:递归方式
#include <stdio.h>
void func(unsigned n,char buf[])
{
if(n<16)//n==0
printf("0x");
else
func(n/16,buf); //递归运算
printf("%c",buf[n%16]); //查字库输出对应的字符
}
int main()
{
int n;
char buf[17]="0123456789ABCDEF"; //创建十六进制字库
printf("输入一个十进制正整数:");
scanf("%d",&n);
printf("转换成十六进制:");
func(n,buf); //调用递归函数来转换成十六进制输出
printf("\n");
return 0;
}
方法二:循环方式
#include <stdio.h>
#include <string.h>
int main()
{
int n,i=0,len=0;
char buf[17]="0123456789ABCDEF";//创建十六进制字库
char tem[100]={0};//存储转换结果,长度可以修改
char c;
printf("输入一个十进制正整数:");
scanf("%d",&n);
printf("转换成十六进制:");
while(1)
{
tem[i++] = buf[n%16];//i记录了整个字符串长度了
n = n/16;
if(n == 0)
{
tem[i] = '\0';//加一个字符串结束符,方便下面使用strlen函数获得已存字符个数
break;
}
}
len = strlen(tem);//获得tem里面字符的个数,也可以直接使用上面的i
printf("0x");
for(i=len-1;i>=0;i--)//按照倒序把tem里面的字符读出来
{
printf("%c",tem[i]);
}
printf("\n");
return 0;
}