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

来源:互联网 发布:笔记本硬盘坏了数据恢复 编辑:程序博客网 时间:2024/06/05 04:09
实现方式一:
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="http://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   15str16[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");}


0 0