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

实现方式一:
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");
}


 


更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。

关于公众号的描述访问如下链接


关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveRocket

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值