做这道题我们可以采用短除法来将十进制转换为六进制。我们先来看看什么短除法:
图片说明

我们发现,我们一次取余数,然后将余数逆序,就可以得到六进制的表示(实际对于其他进制也是如此哦)。
那么我们就可以知道,要想解决这个问题,我们只需要实现短除法,然后逆序输出就好。
关于实现短除法,我们可以通过循环实现。类似于这样。m是求得的余数,然后n=n/6,再次进入循环,最后n/6=0的时候循环结束。

while(n)
{
  m=n%6;
  n=n/6;
}

然后我们就要考虑,如何将每次循环得到的数字逆序输出。一种比较简单的方法是设计一个数组,用数组来存放每次得到的数字,然后逆序输出。这种实现方法很好实现,代码如下:

#include<stdio.h>
int main()
{
    int n,i=0,num[100],j;
    scanf("%d",&n);
    while(n/6!=0)
    {
        num[i]=n%6;
        n=n/6;
        i++;
    }
    printf("%d",n);
    for(j=i-1;j>=0;j--)
        printf("%d",num[j]);
    return 0;
}

如果我们再来不想通过逆序输出数组来实现,其实我们还可以采用递归的方法,代码如下:

#include<stdio.h>
void fun(int n)
{
    int m;
    if(n==0);//n=0时,停止
    else
    {
        m=n%6;
        fun(n/6);
        printf("%d",m);
    }
}
int main()
{
     int n;
    scanf("%d",&n);
     fun(n);
    return 0;
}

还有另一种写法,也是利用递归,代码如下:

#include <stdio.h>

long long int Six(int n)//防止越界,用long long int
{
    if (n / 6 == 0)
    {
        return n % 6;
    }
    else
    {
        return (n % 6) + Six(n / 6) * 10;
    }
}

int main()
{
    int n = 0;

    scanf("%d", &n);
    printf("%lld\n", Six(n));

    return 0;
}

采用递归之后,我们便可以根据递归的实现过程巧妙地实现逆序,不过递归是一种十分消耗性能的方法,在需要处理较多数据的时候,不建议采取递归哦。
好的,这道题就分析到这里啦,希望对大家有所帮助哦。