• PAT-进制转换


    3.5-进制转换

      对于一个P进制的数,如果要转换为Q进制的数,需要分为两步:

      ①将P进制数x转换为十进制数y

       对于一个十进制数y=d1d2···dn,可以将其写为:

    y = d1 * 10n-1 + d2 * 10n-2 + ··· + dn-1 * 10 + dn

       对于P进制数x,如果其形式为a1a2···an,则可以将其写为:

    x = a1 * Pn-1 + a2 * Pn-2 + ··· + an-1 * P + an

       在该形式下,可以有如下代码将P进制数x转为十进制数y:

    1 int y=0,product=1//product 在循环中会不断乘p,得到1、P、P^2、P^3····
    2 while(x!=0){
    3     y=y+(x%10)* product;//x%10是为了每次获取x的个位数
    4     x=x/10//去掉x的个位
    5     product=product*P;
    6 }

      ②将十进制数y转换为Q进制数z

       采用“除基取余法”。“基”就是指将要转换成的进制Q的数值,所以“除基取余法”就是 每次将待转换的十进制数除以Q,然后将得到的余数作为低位存储,所得的商继续除以Q并进行上面的操作,最后当商为0时,将所有的余数从高到低进行输出就可以得到z。

       举例:将十进制数11转换为二进制数

       11除以2,得商为5,余数为1;
     5除以2,得商为2,余数为1;2除以2,得商为1,余数为0;
     1除以2,得商为0,余数为1,算法终止。
     将余数从后往前输出,得1011即为11的二进制数。

       转换代码:

    1 int z[40],num=0//数组z存放Q进制数y的每一位,num为位数
    2 do{
    3      z[num++]=y%Q;//除基取余
    4      y=y/Q;
    5 }while(y!=0);//当商不为0时进行循环
    6 //数组从高z[num-1]到低z[0]输出即为Q进制z,进制转换完成。
    7 //使用do···while语句而不是while语句:如果当十进制数y等于0,
    8 //那么使用while语句的代码将使循环直接跳出,导致出错(正确的
    9 //结果应当是数组z中存放了z[0]=0)

    参考书籍-《算法笔记》-胡凡

  • 相关阅读:
    进阶学习项目实战链接
    Django与数据库操作
    xadmin的使用
    Django 常见的异常
    网站 安全 ---- 常见的 web 攻击
    nodejs--vue
    ECMAScript 6 简介
    Django -- DRF 认证流程
    Django -- 缓存
    Django --- celery异步任务与RabbitMQ模块
  • 原文地址:https://www.cnblogs.com/fangzhiyou/p/12398151.html
Copyright © 2020-2023  润新知