进制转换

更快地进行进制转换

六眼飞鱼酱① 提交于 2020-02-26 18:48:27
更快地进行进制转换 本文主要针对二进制,八进制,十进制,十六进制中的一些转换提供一些技巧和思路,以加快进制转换的手算及心算速度. 十进制转换成其他进制 这里我举一个37.625(十进制)转换为二进制的例子来说明计算方法 分成两个步骤 步骤1 打表,以1为基础,向左不断乘以2,向右不断除以2 得出32 16 8 4 2 1 0.5 0.25 0.125 的表 步骤2 根据步骤1打出的表,每次取表中最大的数来进行减法运算,如果能被最大的数减去(结果大于等于0即能被减去)那么就减去该最大数,然后不断循环,只到结果为0. 其全部过程由下图所示 最后填上小数部分,可得结果为100101.101 这是二进制的,如果是十六进制的那么起打表为 256 16 1 1/16, 八进制的则为 64 8 1 1/8 打出的表可以根据需要调整长度,然后再根据步骤2进行运算即可. 这里可以类比推广到十进制转换成任意进制,不再赘述. 二进制转换为十六进制 再次以刚刚的数为例子100101.101 转换为十六进制 二进制转换为八进制 其过程与前面的'二进制转换为十六进制'方法相同,只不过八进制是以3个二进制数为一组 总结 二进制中128 64 32 16 8 4 2 1的表需要牢记,就可以足够应付心算255之内的数 来源: https://www.cnblogs.com/virgildevil/p

九、进制转换

泄露秘密 提交于 2020-02-17 02:11:43
计算机存储数据采用的是二进制 1.什么是进制 进制其实就是进位制度,规定好的进位方法,列如:十进制是逢十进一,二进制是逢二进一 a.常见的进制:十进制【0~9】,二进制【0~1】,八进制【0~7,用数字0开头】,十六进制【0~9,a~f或者A~F,用0x或者0X开头】 b.进制的特点 1>每种进制都有确定的符号集 2>每种进制采用位置表示发,位置不同,表示的数值不同,值不同与他所在位的权值有关 列如:12345--->1*10^4+2*10^3+3*10^2+4*10^1+5*10^0 c.为什么计算机采用二进制存储数据 采用开关原来,用0和1来表示;计算机运算起来效率更高 2.进制之间的转换 计算机存储数据的单位: 计算机中表示数据的最小单位:比特【bit--b】,又称为 位 计算机中处理数据的最小单位:字节【Byte--B】 1B=8b KB MB GB TB PB EB ...DB 1KB=1024B a.十进制转换成二进制 转换原理:对于整数,对十进制数除2运算,直到商为0,然后讲各个步骤得到的余数倒着写下来 对于小数,整数部分同上,小数部分乘以2取整 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 b.二进制---->十进制 c.二进制---->八进制 转换原理:从左往右依次分组,三位一组,不足补0

python实现进制转换(整数进制转换)

女生的网名这么多〃 提交于 2020-02-15 13:04:04
进制转换有以下两种: D进制转换为十进制: D进制转换为十进制,转换方法为:从D进制的低位开始乘以10^i(i从0开始取)并相加,代码实现为: print ( "输入想要转换的进制" ) D = int ( input ( )) print ( "输入一个D进制数" ) num = int ( input ( )) s = 0 #保存结果 i = 0 while num != 0: s = s + ( num % 10 ) *pow ( D, i ) num = int ( num/10 ) i = i+1 print ( s ) 十进制转换为D进制: 十进制转换为其他进制采用的是辗转相除法,辗转相除法不再赘述,直接上代码: print ( "输入想要转换为的进制" ) D = int ( input ( )) print ( "输入一个十进制数" ) num = int ( input ( )) lis = { } #保存每次辗转相除得到的余数 i = 0 while num != 0: lis [ i ] = num % D #保存余数 num = int ( num/D ) i = i+1 s = 0 i = 0 for j in range ( 0, len ( lis )) : s = s+lis [ j ] *pow ( 10, i )

进制转换

孤街浪徒 提交于 2020-02-12 03:58:01
进制转换 为什么要学习进制 计算机只认识二进制,也就是0和1,为了更好学习计算机,首先就要深入理解什么是进制。 当初最早的程序员都是靠二进制写程序的,就是一堆人敲键盘的0和1来写程序。 后来过渡到十六进制,大家都在敲0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f来写程序。 二进制使用起来很不方便, 16进制或8进制可以解决这个问题,因为,进制越大,数的表达长度也就越短。 为什么偏偏是16或8进制,而不其它的? 2、8、16,分别是2的1次方、3次方、4次方。 这一点使得三种进制之间可以非常直接地互相转换。 8进制或16进制缩短了二进制数,但保持了二进制数的表达特点。 可以明显地看到二进制只能写2个数,而十六进制可以写16个数,这大大地提高了编程的效率。 软件在编译器里是2进制的,在编辑器里是十六进制的,我们写的程序被编译器从十六进制转换成了二进制,多么牛逼啊! 不同进制之间的转换 十进制转二进制 首先从我们最熟悉的十进制和计算机最喜欢的二进制之间的转换开始。 给定一个十进制整数,要求转换为二进制。 首先要理解十进制转换为二进制的流程。 高中的时候就应该已经接触过了,总结起来一句话就是除2取余。 假设给定一个数7: 1.7 / 2 = 3......1 2.3 / 2 = 1......1 3.1 / 2 = 0......1 所以,十进制7 = 二进制111

蓝桥杯小计算器解题代码

ε祈祈猫儿з 提交于 2020-02-10 23:33:09
蓝桥杯小计算器解题代码 试题 历届试题 小计算器 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述   模拟程序型计算器,依次输入指令,可能包含的指令有 1. 数字:‘NUM X’,X为一个只包含大写字母和数字的字符串,表示一个当前进制的数   2. 运算指令:‘ADD’,‘SUB’,‘MUL’,‘DIV’,‘MOD’,分别表示加减乘,除法取商,除法取余   3. 进制转换指令:‘CHANGE K’,将当前进制转换为K进制(2≤K≤36)   4. 输出指令:‘EQUAL’,以当前进制输出结果   5. 重置指令:‘CLEAR’,清除当前数字 指令按照以下规则给出:   数字,运算指令不会连续给出,进制转换指令,输出指令,重置指令有可能连续给出   运算指令后出现的第一个数字,表示参与运算的数字。且在该运算指令和该数字中间不会出现运算指令和输出指令   重置指令后出现的第一个数字,表示基础值。且在重置指令和第一个数字中间不会出现运算指令和输出指令   进制转换指令可能出现在任何地方 运算过程中中间变量均为非负整数,且小于2^63。   以大写的’A’ 'Z’表示10 35 输入格式   第1行:1个n,表示指令数量   第2…n+1行:每行给出一条指令。指令序列一定以’CLEAR’作为开始,并且满足指令规则 输出格式   依次给出每一次’EQUAL’得到的结果

hdu 2031 进制转换 (C语言)

我们两清 提交于 2020-02-04 03:12:35
Problem Description 输入一个十进制数N,将它转换成R进制数输出。 Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。 Output 为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。 Sample Input 7 2 23 12 -4 3 Sample Output 111 1B -11 此题最重要的地方在于用到 while (~scanf("%d%d",&N,&R)) 也可以用while(scanf("%d%d",&N,&R)!=EOF) 可点击此处了解 while (~scanf("%d%d",&N,&R)) 和while(scanf("%d%d",&N,&R!=EOF)的详情 # include <stdio.h> # include <string.h> //为了清空数组而用的头文件,在这题里其实用不到 int main ( ) { int N , R , num ; int a [ 20 ] ; while ( ~ scanf ( "%d %d" , & N , & R ) ) //注意用到 ~ { int i = 0 ; if ( N < 0 ) { N = - N ; printf ( "-" ) ; }

清华机试之多位进制转换

心不动则不痛 提交于 2020-02-01 15:57:45
题目描述 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 输入描述: 多组数据,每行为一个长度不超过30位的十进制非负整数。 (注意是10进制数字的个数可能有30个,而非30bits的整数) 输出描述: 每行输出对应的二进制数。 示例1 输入 0 1 3 8 输出 0 1 11 1000 分析:本题中涉及的数位数比较大,因此不能再用int或者long long型,只得采用字符串形式,而字符串形式的除法是本题的关键 #include<iostream> #include<cstdio> #include<string> #include<vector> using namespace std; string Divide(string str,int x){ //自定义字符串除法,该方法是本题关键所在 int remainder = 0; //用于保存余数 for(int i=0;i<str.size();i++) { int current = remainder*10+str[i]-'0'; //该句与表达式求值中GetNumber函数中语句有同工之妙 str[i]=current/x+'0'; //将字符串中某一位对应的十进制数做除法运算后 //再转换为字符格式 remainder = current%x; //保存新的余数 } int pos=0; while

进制转换

旧时模样 提交于 2020-02-01 06:30:10
二进制转换为十进制: 按权相加 1 例如:二进制数1101.01转化成十进制 1101.01(2)= 2 1*2^0+0*2^1+1*2^2+1*2^3 +0*2^-1+1*2^-2=1+0+4+8+0+0.25=13.25(10) 3 再比如:二进制数100011转成十进制数可以看作这样: 4 数字中共有三个1 即第六位一个,第二位一个,第一位一个(从右到左) 5 然后对应十进制数即2的0次方+2的1次方+2的5次方, 即 100011=32+0+0+0+2+1=35 十进制转换为二进制: 十进制整数转换成 二进制整数"除2取余,逆序排列"法。具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。 例如(173) 10 转换为二进制如图1所示。 图1 十进制小数转换成 二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的 整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,此时0或1为二进制的最后一位。或者达到所要求的精度为止。 然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。

进制转换

戏子无情 提交于 2020-01-30 17:51:57
# include <bits/stdc++.h> using namespace std ; int main ( ) { //freopen("input.txt","r",stdin); char js [ ] = "0123456789ABCDEFGHIJ" ; //常量数组保存对应基数,常量大法吼啊 int n , r ; scanf ( "%d%d" , & n , & r ) ; printf ( "%d=" , n ) ; //提前输出n,因为后面n变化了,如果想在后面输出,就要多加一个变量保存n stack < int > s ; //用栈来保存倒序的结果,便于输出 while ( n ) { int a = n % r ; n / = r ; if ( a < 0 ) { a - = r ; n ++ ; } //如果余数为负数,余数减去进制数,商加1 s . push ( a ) ; //结果进栈 } while ( ! s . empty ( ) ) { //输出结果 printf ( "%c" , js [ s . top ( ) ] ) ; s . pop ( ) ; } printf ( "(base%d)\n" , r ) ; return 0 ; } 来源: CSDN 作者: Angesthan 链接: https://blog.csdn.net

蓝桥杯 PREV-55 小计算器

妖精的绣舞 提交于 2020-01-30 09:26:16
问题描述 模拟程序型计算器,依次输入指令,可能包含的指令有 1. 数字:‘NUM X’,X为一个只包含大写字母和数字的字符串,表示一个当前进制的数   2. 运算指令:‘ADD’,‘SUB’,‘MUL’,‘DIV’,‘MOD’,分别表示加减乘,除法取商,除法取余   3. 进制转换指令:‘CHANGE K’,将当前进制转换为K进制(2≤K≤36)   4. 输出指令:‘EQUAL’,以当前进制输出结果   5. 重置指令:‘CLEAR’,清除当前数字 指令按照以下规则给出:   数字,运算指令不会连续给出,进制转换指令,输出指令,重置指令有可能连续给出   运算指令后出现的第一个数字,表示参与运算的数字。且在该运算指令和该数字中间不会出现运算指令和输出指令   重置指令后出现的第一个数字,表示基础值。且在重置指令和第一个数字中间不会出现运算指令和输出指令   进制转换指令可能出现在任何地方 运算过程中中间变量均为非负整数,且小于2^63。   以大写的’A’ 'Z’表示10 35 输入格式 第1行:1个n,表示指令数量   第2…n+1行:每行给出一条指令。指令序列一定以’CLEAR’作为开始,并且满足指令规则 输出格式 依次给出每一次’EQUAL’得到的结果 样例输入 7 CLEAR NUM 1024 CHANGE 2 ADD NUM 100000 CHANGE 8 EQUAL