Codeforces 39H - Multiplication Table(进制转换)
题目来源:Problem - 39H - Codeforces
虽然是H题,但是别急,码龄1岁的就可以做了。
题目大意:打印一张(k-1)×(k-1)的k进制乘法表。
题目思路:写一个进制转换的函数。
AC代码:
方法一:普通函数。
#include<bits/stdc++.h>
using namespace std;string radix(int a,int b){ string s="";while(a!=0){if(a%b<10) s=char(a%b+48)+s;else s=char(a%b+55)+s;a/=b;}return s;
}int main(){cin.tie(0);ios::sync_with_stdio(0);int n; cin>>n;for(int i=1;i<n;i++){for(int j=1;j<n;j++) cout<<radix(i*j,n)<<" ";cout<<endl;}return 0;
}
//ACplease!!!
方法二:递归
#include<bits/stdc++.h>
using namespace std;int radix(int x,int y){if(x==0) return 0;else return radix(x/y,y)*10+x%y;
}int main(){cin.tie(0);ios::sync_with_stdio(0);int n; cin>>n;for(int i=1;i<n;i++){for(int j=1;j<n;j++) cout<<radix(i*j,n)<<" ";cout<<endl;}return 0;
}
//ACplease!!!
相关知识:进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。 对于任何一种进制---X进制,就表示每一位上的数运算时都是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。
进位制/位置计数法是一种记数方式,故亦称进位记数法/位值计数法,可以用有限的数字符号代表所有的数值。可使用数字符号的数目称为基数(en:radix)或底数,基数为n,即可称n进位制,简称n进制。现在最常用的是十进制,通常使用10个阿拉伯数字0-9进行记数。
对于任何一个数,我们可以用不同的进位制来表示。比如:十进数57(10),可以用二进制表示为111001(2),也可以用五进制表示为212(5),也可以用八进制表示为71(8)、用十六进制表示为39(16),它们所代表的数值都是一样的。
十进制
人类天然选择了十进制。
由于人类解剖学的特点,双手共有十根手指,故在人类自发采用的进位制中,十进制是使用最为普遍的一种。成语“屈指可数”某种意义上来说描述了一个简单计数的场景,而原始人类在需要计数的时候,首先想到的就是利用天然的算筹——手指来进行计数。
十进制编码几乎就是数值本身。
数值本身是一个数学上的抽象概念。经过长期的演化、融合、选择、淘汰,系统简便、功能全面的十进制计数法成为人类文化中主流的计数方法,经过基础教育的训练,大多数的人从小就掌握了十进制计数方法。盘中放了十个苹果,通过数苹果我们抽象出来“十”这一数值,它在我们的脑海中就以“10”这一十进制编码的形式存放和显示,而不是其它的形式。从这一角度来说,十进制编码几乎就是数值本身。
十进制的基数为10,数码由0-9组成,计数规律逢十进一。
二进制
二进制有两个特点:它由两个数码0,1组成,二进制数运算规律是逢二进一。
为区别于其它进制,二进制数的书写通常在数的右下方注上基数2,或在后面加B表示,其中B是英文二进制Binary的首字母。
1.二进制数中只有两个数码0和1,可用具有两个不同稳定状态的元器件来表示一位数码。例如,电路中某一通路的电流的有无,某一节点电压的高低,晶体管的导通和截止等。
八进制
十六进制
由于二进制数在使用中位数太长,不容易记忆,所以又提出了十六进制数。
例如:十六进制数4AC8可写成(4AC8)16,或写成4AC8H。
对于形式化的进制表示,我们可以从0开始,对数字的各个数位进行编号,即个位起往左依次为编号0,1,2,……;对称的,从小数点后的数位则是-1,-2,……
(由于此处不可选择字体,说明如下:An,A2,A-1等符号中,n,2,-1等均应改为下标,而上标的幂次均用^作为前缀)
一个十进制数110,其中百位上的1表示1个10^2,既100,十位的1表示1个10^1,即10,个位的0表示0个10^0,即0。
一个二进制数110,其中高位的1表示1个2^2,即4,低位的1表示1个2^1,即2,最低位的0表示0个2^0,即0。
一个十六进制数110,其中高位的1表示1个16^2,即256,低位的1表示1个16^1,即16,最低位的0表示0个16^0,即0。
可见,在数制中,各位数字所表示值的大小不仅与该数字本身的大小有关,还与该数字所在的位置有关,我们称这关系为数的位权。
十进制数的位权是以10为底的幂,二进制数的位权是以2为底的幂,十六进制数的位权是以16为底的幂。数位由高向低,以降幂的方式排列。
二进制数、十六进制数转换为十进制数的规律是相同的。把二进制数(或十六进制数)按位权形式展开多项式和的形式,求其最后的和,就是其对应的十进制数——简称“按权求和”.
=8*1+4*0+2*0+1*1+0*(1/2)+1*(1/4)
=3×16的2次方+8×16的1次方+10×16的0次方+1×16的-1次方+1×16的-2次方
整数转换.一个十进制整数转换为二进制整数通常采用除二取余法,即用2连续除十进制数,直到商为0,逆序排列余数即可得到――简称除二取余法.
同理,把十进制数转换为十六进制数时,将基数2转换成16就可以了.
由于4位二进制数恰好有16个组合状态,即1位十六进制数与4位二进制数是一一对应的.所以,十六进制数与二进制数的转换是十分简单的.
(1)十六进制数转换成二进制数,只要将每一位十六进制数用对应的4位二进制数替代即可――简称位分四位.
所以(4AF8B)16=(1001010111110001011)2
(2)二进制数转换为十六进制数,从左向右每四位一组,依次写出每组4位二进制数所对应的十六进制数――简称四位合一位.
例:将二进制数(000111010110)2转换为十六进制数.
N = 5A.8H = 5*16^1+A*16^0+8*16^-1 = 80+10+0.5 = 90.5
3.小数转换——整数退位法:举例:0.321d转成二进制,由于321不是5的倍数,用取余法、取整法可能要算很久,这时候我们可以采用整数退位法。原理如下:
(y)2=T/2^n=T*2^(-n),T退位,位数不足前端补零
Codeforces 39H - Multiplication Table(进制转换)相关推荐
- Educational codeforces round 83 div2C(类似进制转换,等比数列又一个性质)
C. Adding Powers 原题目地址 题意: 给你一个目标数组,要你 对一个所有元素从0开始的数组 进行一种操作. 每一步可以对一个元素增加 k^i ( i 为每一步)( i 可以为0) 或者 ...
- C语言32位正整数作为id进程,SOJ4453 Excel列数 进制转换
描述 我们都知道Excel的列数是用字母表示的,比如第1列对应A,第27列对应AA. 假设给定一个正整数n,你能给出它所对应的字母表示么? 输入格式 程序需要读入多个测试样例,每个测试样例中: 一个正 ...
- python内置函数bin,Python内置函数bin() oct()等实现进制转换
Python内置函数bin() oct()等实现进制转换 使用Python内置函数:bin().oct().int().hex()可实现进制转换. 先看Python官方文档中对这几个内置函数的描述: ...
- 各种进制的相互转换【进制转换器】【进制转换】【算法】
第一种进制转换: 写此篇题解之前,已经发布十进制转换M进制详解,R进制转换成十进制详解. 那第一种进制转换就是将十进制作为跳板,融合以上两种进制转换,到达由M进制转换成R进制的效果. PS:此处不 ...
- 进制转换二进制转八进制_将二进制数制转换为八进制数制
进制转换二进制转八进制 Prerequisite: Number systems 先决条件: 数字系统 To convert binary numbers into octal numbers, we ...
- 单片机进制转换实现(报告+源码)
用4x4矩阵及LCD1602液晶显示实现各进制转换 摘要:在计算机及其相关的各领域中,数制的二进制.八进制.十进制和十六进制之间的相互转换可谓无处不在.为满足相关领域人员对进制转换计算的需求,特此利用 ...
- python中不同进制的整数之间可以直接运算_Python 进制转换、位运算
一.进制转换 编程用十进制,十进制转换为二进制.八进制.十六进制 In [135]: bin(23) Out[135]: '0b10111' In [136]: oct(23) Out[136]: ' ...
- c语言进制转换pdf下载,C语言实现任意进制转换.doc
C语言实现任意进制转换.doc includestdio.h#includemath.h#includestring.hvoid dtox(double num,int jz)char xnum100 ...
- 进制转换converse
栈和队列是在软件设计中常用的两种数据结构,它们的逻辑结构和线性表相同. 其特点在于运算受到了限制:栈按"后进先出"的规则进行操作,队按"先进先出"的规则进行操作 ...
- 进制转换 位运算(包括补码、原码、反码、~0等一些零碎东西一次说清)
我发现网上关于标题上的内容介绍的都很零碎,因此为了方便查找.也为了本人对这一部分的充分理解,就想着写一篇这样的博客(我分成了几个部分,以便查找): 一.进制转换 让我们先来看看各个进制的定义: 十进制 ...
最新文章
- win10 mysql 5.7.21_MySql 5.7.21免安装版本win10下的配置方法
- 如何获取js对象的对象名
- java越权发送邮件_水平越权的常见解决方法
- 笔记本电脑可以安装python吗-笔记本怎样安装Python64位的?
- Spring Boot配置IDEA无法创建Spring Initializr项目
- 面试题:利用一个栈倒序另外一个栈中的数
- python2和python3解释器的区别
- FFmpeg示例程序合集-批量编译脚本
- Python爬虫进阶必备 | X中网密码加密算法分析
- Eclipse添加GBK编码
- 前言:电商产品经理必修课-如何打造实战型商品系统
- Stata数据处理:清洗CFPS数据库
- 【考试总结】[CQOI2017]考试总结
- B站网页下载视频(flv格式)
- 038 罗尔定理及拉格朗日定理
- Linux查看服务器配置
- 4K分辨率是什么 你真的知道吗?
- 无线通信——C-V2X是什么?
- 人这一辈子,渡你的只有两个人
- 用java语言编写选课系统_求用JAVA为我写一个简单的选课系统程序,实现增,删,改,查功能...
热门文章
- ML1.1 机器学习误差分析
- 『TensorFlow』SSD源码学习_其五:TFR数据读取数据预处理
- 拯救红米note3砖头
- JavaSE_05【数组】拓展练习
- css3 shapes是什么意思,New Shapes
- matlab ols regress,计量经济学简单线性回归OLS的Matlab程序.pdf
- 论文研读--Masked Generative Distillation
- 2015年工作总结——①名IT女的日常
- 用python画多来a梦-Python—turtle画图(哆啦A梦)
- python 协程加多线程下载asyncio、ThreadPoolExecutor