进制转换思路及代码

进制转换思路及代码

一、将P进制x转换为十进制y

【原理】:十进制y可以表示为 y = d 1 ∗ 1 0 n − 1 + d 2 ∗ 1 0 n − 2 + d 3 ∗ 1 0 n − 3 + . . . + d n − 1 ∗ 10 + d n y=d_1*10^{n-1}+d_2*10^{n-2}+d_3*10^{n-3}+...+d_{n-1}*10+d_n y=d110n1+d210n2+d310n3+...+dn110+dn。同样,P进制x也可以表示为 x = a 1 ∗ P n − 1 + a 2 ∗ P n − 2 + a 3 ∗ P n − 3 + . . . + a n − 1 ∗ P + a n x=a_1*P^{n-1}+a_2*P^{n-2}+a_3*P^{n-3}+...+a_{n-1}*P+a_n x=a1Pn1+a2Pn2+a3Pn3+...+an1P+an。那么就可以通过十进制的加法和乘法转换为十进制y。
【实际操作】:首先从低位至高位依次取出x的各个位数。然后将各个位的系数乘上对应进制的倍数。然后把所有位的乘积结果求和即为十进制数。
**【注意】**这里取x的各个位数要用x%10。因为x在输入之后,可以理解为它被识别成了十进制。如110表示的是一百一十。

#include<cstdio>

int main(){
    int x;
    scanf("%d",&x);
    int P=2;
    int y=0,product=1;
    while(x!=0){
        y=y+(x%10)*product;
        x = x/10;
        product = product*P;
    }
    printf("%d",y);
    return 0;
}

二、将十进制y转换为Q进制z

**【原理】**采用除基取余法。然后从高位至低位输出。
**【实际操作】**建立一个z[40]用于存储各个位数。然后使用y%Q以此得到各个位数。
**【注意】**最后要倒叙输出。

#include<cstdio>

int main(){
    int y;
    scanf("%d",&y);
    int Q=2;
    int z[40],num=0;
    do{
        z[num++]=y%Q;
        y=y/Q;
    }while(y!=0);
    for(int i=num-1;i>=0;i--){
        printf("%d",z[i]);
    }
    return 0;
}
  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值