做这道题我们可以采用短除法来将十进制转换为六进制。我们先来看看什么短除法:
我们发现,我们一次取余数,然后将余数逆序,就可以得到六进制的表示(实际对于其他进制也是如此哦)。
那么我们就可以知道,要想解决这个问题,我们只需要实现短除法,然后逆序输出就好。
关于实现短除法,我们可以通过循环实现。类似于这样。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;
}采用递归之后,我们便可以根据递归的实现过程巧妙地实现逆序,不过递归是一种十分消耗性能的方法,在需要处理较多数据的时候,不建议采取递归哦。
好的,这道题就分析到这里啦,希望对大家有所帮助哦。

京公网安备 11010502036488号