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:
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-进制转换的更多相关文章
- PAT/进制转换习题集
B1022. D进制的A+B (20) Description: 输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数. Input: ...
- PAT甲级 进制转换题_C++题解
进制转换题 PAT (Advanced Level) Practice 进制转换题 目录 <算法笔记> 重点摘要 1015 Reversible Primes (20) 1019 Gene ...
- SQL Server 进制转换函数
一.背景 前段时间群里的朋友问了一个问题:“在查询时增加一个递增序列,如:0x00000001,即每一个都是36进位(0—9,A--Z),0x0000000Z后面将是0x00000010,生成一个像下 ...
- [No000071]C# 进制转换(二进制、十六进制、十进制互转)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- JS中的进制转换以及作用
js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现: //10进制转为16进制 ().toString() // =>&q ...
- 结合stack数据结构,实现不同进制转换的算法
#!/usr/bin/env python # -*- coding: utf-8 -*- # learn <<Problem Solving with Algorithms and Da ...
- 进制转换( C++字符数组 )
注: 较为简便的方法是用 整型(int)或浮点型(long.double 注意:该类型不一定能够准确存储数据) 来存放待转换的数值,可直接取余得到每一位数值 较为稳定的方法是用 字符数组储存待转换的数 ...
- JS 进制转换
十进制转换成其他进制 objectname.toString([radix]) objectname 必选项.要得到字符串表示的对象. radix 可选项.指定将数字值转换为字符串时的进制. 例如 ...
- php的进制转换
学习了php的进制转换,有很多的知识点,逻辑,也有最原始的笔算,但是我们还是习惯使用代码来实现进制的转换,进制的转换代码有如下:二进制(bin)八进制( oct)十进制( dec)十六进制( hex) ...
- C++ 中数串互转、进制转换的类
/******************************************************************** created: 2014/03/16 22:56 file ...
随机推荐
- vitual box 虚拟机调整磁盘大小 resize partiton of vitual os
key:vitual box, 虚拟机,调整分区大小 引用:http://derekmolloy.ie/resize-a-virtualbox-disk#prettyPhoto 1. 关闭虚拟机,找到 ...
- grep -v|grep -F
cat a cat b #取b中不含1的行 b #b先和a比较,两者交集与b再取交集 b: b: b: b: b: b:22 $ grep -F a -f a b#a先和a比较,两者交集与b再取交集 ...
- Java中使用PrepateStatement并且like模糊查询
在使用PreparedStatement进行模糊查询的时候废了一番周折,以前一直都没有注意这个问题.一般情况下我们进行精确查询,sql语句类似:select * from table where na ...
- 三十二、http与www服务介绍
一.用户访问百度(www.baidu.com) 用户访问在url中输入地址后,首先会访问本地的缓存和hosts文件,如果没有,会访问本地DNS,在就是根域和顶级域名等,在前面已经说过了,这里不再赘述. ...
- JSP和EL和JSTL
什么是JSP Java Server Page的缩写从用户角度看待,就是一个网页从程序员角度看待,其实是一个java类,它继承了Servlet,所以可以直接说jsp就是一个Servlet 为什么会有J ...
- CHINA SHOP 2019 | 奇点云“云+端”产品及解决方案赋能线下零售
第二十一届中国零售业博览会(CHINA SHOP) 在山东青岛世界博览城盛大开幕 作为CHINA SHOP的老朋友 奇点云自然不会缺席 China Shop逛展直击灵魂“双拷问”: No.1 今年CH ...
- D - Association for Control Over Minds Kattis - control (并查集+STL)
You are the boss of ACM (Association for Control over Minds), an upstanding company with a single go ...
- Iterator迭代器解决[为何禁止在foreach内增删]
迭代器的应用场景: 1.对集合进行增加删除,禁止使用foreach,循环的动态操作2.倒序遍历3.遍历循环 步入正题:为何禁止在foreach内进行增删? 先看一下代码: /** * ...
- Oracle中实现sql查询得到连续号码段
一.表名为t的表中数据如下: select * from t; FPHM KSHM ---------- ---------- 实现代码如下: select b.fphm,min(b.kshm),ma ...
- SecureCRT8.1安装破解
博主本人平和谦逊,热爱学习,读者阅读过程中发现错误的地方,请帮忙指出,感激不尽 一.安装破解 [基本信息] SecureCRT v8.x 注册机,TEAM Z.W.T 出品,MD5 = 44114b9 ...