描述
小乐乐在课上学习了二进制八进制与十六进制后,对进制转换产生了浓厚的兴趣。因为他的幸运数字是6,所以他想知道一个数表示为六进制后的结果。请你帮助他解决这个问题。
输入描述:
输入一个正整数n (1 ≤ n ≤ 10^9)
输出描述:
输出一行,为正整数n表示为六进制的结果
示例1
输入:
6
输出:
10
示例2
输入:
120
输出:
320
思路:这里我的想法主要是想通过数组实现,首先我通过本题所给数据范围推算最大数据,我得到的最大数据是6^12,刚好数组的下标对应次方,我们在数组每一个格子都除以对应的6^下标,得到对应6进制的数字,再使这个数字取模,继续重复上述操作,最后输出即可!!!!!!!!!
下面请看代码
#include<stdio.h>
#include<math.h>
int main()
{
int n,m=12,num[15],i;
scanf("%d",&n);
for(i=0;i<=12;i++)
{
num[i]=n/pow(6,m);
n=n%(int)pow(6,m);
m--;
}
int f=0;
for(i=0;i<=12;i++)
{
if(num[i]!=0)//使用变量巧妙避开输出前导0
{
++f;
}
if(f==0)
continue;
printf("%d",num[i]);
}
return 0;
}
下面是题解:
对于这种进制转换的题目,我们常常使用短除法!!!!!!!!!!!!!!!!!!!!!!
短除法演示:
如十进制120 —> 六进制
120/6=20 ----余0
20/6=3 ----余2
3/6=0 ----余3很明显所对应的六进制数为320
我们模拟出这个过程即可
#include<stdio.h> using namespace std; int main() { int a,r,i = 0,j = 1,count[1000]; scanf("%d",&a); do { r=a%6; a=a/6;//短除法 i++; count[i]=r;//将余数存下来 } while(a!=0); for(j=i;j>0;j--) printf("%d",count[j]);//倒序输出 }
我们还可以使用递归来实现本题
void fun(long n) { int m; if(n==0);//设置边界 else { m=n%6; fun(n/6); printf("%d",m); } } main() { long n; scanf("%d",&n); fun(n); }