您的位置:首页 > 其它

递归:多种方法实现进制转换,实现系统原函数_itoa()

2015-08-07 22:51 429 查看
实现方式一:
void to_2(int num)
{
if (!num)
{
return 0;
}
else
{
to_2(num / 2);
printf("%d  ", num % 2);
}
}
void to_8(int num)
{
if (!num)
{
return 0;
}
else
{
to_8(num / 8);
printf("%0x  ", num % 8);
}
}
void to_16(int num)
{
if (!num)
{
return 0;
}
else
{
to_16(num / 16);
printf("%x  ", num % 16);
}
}
void main()
{
int num;
scanf("%d", &num);
printf("%d的二进制数:", num);
to_2(num);

printf("\n%d的八进制数:", num);
to_8(num);

printf("\n%d的十六进制数:", num);
to_16(num);
system("pause");
}
测试结果:
<img src="https://img-blog.csdn.net/20150807225141342?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
-----------------------------------------------------------------
实现方式二:
void to2str(int num, int i, char str2[33])
{
if (!num)
{
return 0;
}
else
{
to2str(num / 2, i + 1, str2);
str2[i] = (num % 2) + '0';
}
}
void to8str(int num, int i, char str8[33])
{
if (!num)
{
return 0;
}
else
{
to8str(num / 8, i + 1, str8);
str8[i] = (num % 8) + '0';
}
}
void to16str(int num, int i, char str16[33])
{
if (!num)
{
return 0;
}
else
{
to16str(num / 16, i + 1, str16);//位数向前
if (num % 16 < 10)
{
str16[i] = (num % 16) + '0';//字符整数的转换
}
else
{
//10   11   12   13   14   15
str16[i] = (num % 16) - 10 + 'A';
}
}
}
//十进制转二、八、十六进制
void main()
{
char str2[33] = { 0 };
char str8[33] = { 0 };
char str16[33] = { 0 };

printf("请输入要转换的十进制数:");
int num = 0;
scanf("%d", &num);
to2str(num, 0, str2);

_strrev(str2);//字符串逆转
printf("二进制数输出:%s\n", str2);

to8str(num, 0, str8);
_strrev(str8);
printf("八进制数输出:%s\n", str8);

to16str(num, 0, str16);
_strrev(str16);
printf("十六进制数输出:%s\n", str16);
system("pause");
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: