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:

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

  ②将十进制数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的二进制数。

   转换代码:

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

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

PAT-进制转换的更多相关文章

  1. PAT/进制转换习题集

    B1022. D进制的A+B (20) Description: 输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数. Input: ...

  2. PAT甲级 进制转换题_C++题解

    进制转换题 PAT (Advanced Level) Practice 进制转换题 目录 <算法笔记> 重点摘要 1015 Reversible Primes (20) 1019 Gene ...

  3. SQL Server 进制转换函数

    一.背景 前段时间群里的朋友问了一个问题:“在查询时增加一个递增序列,如:0x00000001,即每一个都是36进位(0—9,A--Z),0x0000000Z后面将是0x00000010,生成一个像下 ...

  4. [No000071]C# 进制转换(二进制、十六进制、十进制互转)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. JS中的进制转换以及作用

    js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现: //10进制转为16进制 ().toString() // =>&q ...

  6. 结合stack数据结构,实现不同进制转换的算法

    #!/usr/bin/env python # -*- coding: utf-8 -*- # learn <<Problem Solving with Algorithms and Da ...

  7. 进制转换( C++字符数组 )

    注: 较为简便的方法是用 整型(int)或浮点型(long.double 注意:该类型不一定能够准确存储数据) 来存放待转换的数值,可直接取余得到每一位数值 较为稳定的方法是用 字符数组储存待转换的数 ...

  8. JS 进制转换

    十进制转换成其他进制 objectname.toString([radix])   objectname 必选项.要得到字符串表示的对象. radix 可选项.指定将数字值转换为字符串时的进制. 例如 ...

  9. php的进制转换

    学习了php的进制转换,有很多的知识点,逻辑,也有最原始的笔算,但是我们还是习惯使用代码来实现进制的转换,进制的转换代码有如下:二进制(bin)八进制( oct)十进制( dec)十六进制( hex) ...

  10. C++ 中数串互转、进制转换的类

    /******************************************************************** created: 2014/03/16 22:56 file ...

随机推荐

  1. [USACO09MAR]Moon哞哞叫Moon Mooing(模拟)

    链接:https://ac.nowcoder.com/acm/contest/1086/F来源:牛客网 题目描述 A full moon casts some sort of spell on the ...

  2. Spring Boot 2.x 整合 Redis最佳实践

    一.前言 在前面的几篇文章中简单的总结了一下Redis相关的知识.本章主要讲解一下 Spring Boot 2.0 整合 Redis.Jedis 和 Lettuce 是 Java 操作 Redis 的 ...

  3. [LC] 451. Sort Characters By Frequency

    Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...

  4. [LC] 1048. Longest String Chain

    Given a list of words, each word consists of English lowercase letters. Let's say word1 is a predece ...

  5. 11)const

    const修饰一个  变量   为只读 : 然后 我再 a=: 这样写就是不行. 其实这个知识点主要考察    指针变量  指针指向的内存   是两个概念 char buf[]="dhasl ...

  6. 5.redis主从配置

    Redis的主从复制 1.什么是主从复制 持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据 ...

  7. es 查询分词字段为空的数据

    { "query": { "bool" : { "filter" : { "script" : { "scri ...

  8. Linux BASH简单总结

    BASH: 变量的设置规则: 1.变量与变量内容以一个符号"="来链接 2.等号两边不能直接接空白字符 3.变量名称只能是英文字母与数字,但是不能以数字开头 4.变量内容若有空白字 ...

  9. Linux quota磁盘配额

    quota:磁盘配额 限制某一群组所能使用的最大磁盘配额 限制某一用户的最大磁盘配额 使用限制: 仅能针对整个filesystem 核心必须支持quota quota的记录文件 只对一般身份使用者有效 ...

  10. 用Spring Tool Suite简化你的开发

    如果你是一个喜欢用spring的人,你可能会在欣赏spring的强大功能外,对其各样的配置比较郁闷,尤其是相差较大的版本在配置文件方面会存在差异,当然你可以去花不少的时间去网上查找相关的资料,当你准备 ...