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