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");
}

 递归图解

posted @ 2014-11-05 17:13  Vivu  阅读(647)  评论(0编辑  收藏  举报