进制转换【

进制转换:

对于一个P进制的数x如何转换成Q进制的数z?(分两步)

第一步:将P进制的数x转换成十进制的数y
              对于一个十进制数y= a1a2…an,它可以写成这样的形式
              y=a1*10n-1+a2*10n-2+…+an-1*101+an*100
             同样的,对于P进制数x= a1a2…an,那么它可以通过该形式得到对应的十进制数:
              y=a1*Pn-1+a2*Pn-2+…+an-1*P1+an*P0
             而这个公式可以利用循环实现
代码实现:

/*P进制->十进制,利用循环实现
       x是指待转换的P进制数x,P指的是待转换的进制P
*/
int toDecimal(int x,int P){
    int y=0,product=1;//product会不断乘p,从而得到p^0,p^1,P^2……
    while(x!=0){
        y=y+(x%10)*product;//decimal%10是为了获取个位数
        x=x/10;
        product=product*P;
    }
    return y;
}

第二步: 将十进制的数y转换成Q进制的数z(除基取余法)
             基指的是带转换的进制Q,而除基取余法就是将带转换的数y除以Q,得到的余数低位存储,
             而商则继续以上操作,直到商为0为止,最后将余数从高到低输出就是要求的Q进制数z。
             
             举个例子:将十进制数9转换成二进制数
             1)9除以2商4,余1
             2)4除以2商2,余0
             3)2除以2商1,余0
             4)1除以2商0,余1
             故最后得到的二进制数就是1001

代码实现:

/*十进制->Q进制
        decimal是指待转换的十进制数,Q进制是指要转换成的进制
        数组z存放Q进制数的每一位,num为位数
*/
void toBinary(int decimal,int Q)
{
    int z[40],num=0;
    do      //除基取余
    {
        z[num++]=decimal%Q;
        decimal=decimal/Q;
    }
    while(decimal!=0);
}

你可能感兴趣的:(#,3.5,进制转换,c++,c语言,算法)