进制转换
进制转换是一个很常用的技巧,平时在刷题中一般是一个小模块,在一个大题里面作为数据处理的步骤。
数据定义:待转换数Q为W进制,需要转换为P进制。
下面是进制转换的一般流程:
(1)将Q先转换为10进制数temp
(2)将temp再转换为P进制
以下为算法的详细步骤:
(1)
首先要先明确一个定义,即十进制的数 ,如53245,5万2千3百4十5。令其为 ,那么其中 , 等等,它可以写成以下形式:
由此,一个 进制数 也可以写成:
而这个公式实际上就直接计算出了其10进制的值,对公式从右往左累加其值即可。由以上,将 转换为10进制可以由如下循环得到:
int x=1101; //设定上为2进制,值应该为13,将其转换为10进制的y
int y=0,pro=1; //pro为辅助值,用来计算2的阶乘如2^0=1,2^1=2,2^2=4,其值将分别为1,2,4
while(x!=0)
{
y=y+(x%10)*pro; //只要不断累加y,就可以计算出x的10进制值,原理就是借助上面的公式
x=x/10;
pro=pro*2;
}
(2)
将10进制数temp转化为P进制,可以用除基取余法。比如将15转化为2进制:
15除2,等于7,余1;
7出2,等于3,余1;
3除2,等于1,余1;
1除2,等于0,余1;算法终止。
这样将位数从后往前拼凑,答案即为1111。
扫描二维码关注公众号,回复:
11317291 查看本文章
实现如下:
int x=11,num=0; //x为10进制数,将要转化的2进制数的每一位放在ans里,num记录2进制数的位数
int ans[1024]={0};
do
{
ans[num++]=x%2;
x/=2;
}while(x!=0)
总结:进制转换作为一个小技巧,经常出现在大题的数据处理部分,其算法简单有效。本文介绍的两步,都是 级的算法。其中初学者对(1)部分的算法容易忘记,可以尝试多编写,记忆。