C语言实现进制转换——超图面试题
递归:递归的原理,就是自己调用自己本身。存在一个顺序的问题,如果在递归前的是顺序执行,递归后的是逆序执行,如下:
void gogogo() { //递归之前 gogogo(); //递归之后 }
下面实现进制转换就是利用的这个原理。
代码如下:
#include<stdio.h> #include<stdlib.h> void toletter(int num) { switch (num) { case 10: printf("%c", 'a'); break; case 11: printf("%c", 'b'); break; case 12: printf("%c", 'c'); break; case 13: printf("%c", 'd'); break; case 14: printf("%c", 'e'); break; case 15: printf("%c", 'f'); break; default: printf("%d", num); break; } } //十进制转二进制 void convertto2(int num) { if (num ==1|| num==0) { printf("%d",num); } else { int n=num / 2; convertto2(n); printf("%d",num %2);//如果把这句话放在convertto2(n);之前就是顺序执行,显示是逆序,所以实现了余数的倒序排列。 } } //十进制转八进制 void convertto8(int num) { if (num < 8) { printf("%d", num); } else { int n = num / 8; convertto8(n); printf("%d", num % 8); } } //十进制转十六进制 void convertto16(int num) { if (num<16) { toletter(num); } else { int n = num / 16; convertto16(n ); toletter(num % 16); } } void main() { int num; printf("请输入一个整数"); scanf_s("%d",&num); printf("\n十进制转二进制:"); convertto2(num); printf("\n十进制转八进制:"); convertto8(num); printf("\n十进制转十六进制:"); convertto16(num); system("pause"); }
递归图解