小乐乐与进制转换

描述

小乐乐在课上学习了二进制八进制与十六进制后,对进制转换产生了浓厚的兴趣。因为他的幸运数字是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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZZWWWFFF_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值