进制转换

1112: 进制转换(函数专题)

喜欢而已 提交于 2019-12-31 12:53:17
题目描述 输入一个十进制整数n,输出对应的二进制整数。常用的转换方法为“除2取余,倒序排列”。将一个十进制数除以2,得到余数和商,将得到的商再除以2,依次类推,直到商等于0为止,倒取除得的余数,即为所求的二进制数。例如,把52换算成二进制数的计算过程如下图: 52除以2得到的余数依次为0,0,1,0,1,1,倒序排列,得到52对应的二进制数110100。 用递归的思想来描述上述计算过程是这样的:输出n/2对应的二进制数,然后输入%2。递归函数的实现过程如下: void convert(int n) { if(n > 0) { 调用自身,输出n/2对应的二进制数; 输出n%2; } } 试试吧! 输入 输入一个正整数n。 输出 输出n对应的二进制数。 样例输入 52 样例输出 110100 # include <stdio.h> void convert ( int n ) ; int main ( ) { int n ; scanf ( "%d" , & n ) ; convert ( n ) ; return 0 ; } void convert ( int n ) { if ( n > 0 ) { convert ( n / 2 ) ; printf ( "%d" , n % 2 ) ; } } 来源: CSDN 作者: Dvv啊 链接: https://blog.csdn

Python 的浮点数损失精度问题(为什么说双精度浮点数有15位十进制精度)

孤街浪徒 提交于 2019-12-29 21:59:02
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本篇讨论的现象可以从下面这段脚本体现出来: >>> x = 0.0 >>> for i in range( 10 ): x += 0.1 print (x) 0.1 0.2 0.30000000000000004 0.4 0.5 0.6 0.7 0.7999999999999999 0.8999999999999999 0.9999999999999999 >>> 即:为什么有几行的输出看起来不对? 因为 Python 中使用双精度浮点数来存储小数。在 Python 使用的 IEEE 754 标准(52M/11E/1S)中,8字节64位存储空间分配了52位来存储浮点数的有效数字,11位存储指数,1位存储正负号,即这是一种二进制版的科学计数法格式。虽然52位有效数字看起来很多,但麻烦之处在于,二进制小数在表示有理数时极易遇到无限循环的问题。其中很多在十进制小数中是有限的,比如十进制的 1/10,在十进制中可以简单写为 0.1 ,但在二进制中,他得写成:0.0001100110011001100110011001100110011001100110011001…..(后面全是 1001 循环)。因为浮点数只有52位有效数字,从第53位开始,就舍入了。这样就造成了标题里提到的”浮点数精度损失“问题。 舍入(round

进制转换

最后都变了- 提交于 2019-12-28 05:48:23
二进制转换成十进制 规则:从最低位开始,将每个位上的数据提取出来,乘以2的(位数-1)次方,然后求和。 例如:1011=1*2^(1-1) + 1*2^(2-1) + 0*2^(3-1) + 1*2^(4-1) = 1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 1 + 2 + 0 + 8 = 11 按位乘权相加(权就是位数) 十六进制转换成十进制 规则:从最低位开始,将每个位上的数据提取出来,乘以16的(位数-1)次方,然后求和。 十进制转换成二进制 规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对就的二进制 。 二进制原码、反码、补码 对于有符号的而言: 1)二进制的最高位是符号位,0表示正数,1表示负数。 2)正数的原码、反码、补码都一样(三码合一)。 3)负数的反码=原码符号位不变,其它位取反(0->1,1->0)。 4)负数的补码=它的反码+1 5)0的反码、补码都是0 6)计算机运算的时候,都是以补码的方式来运算 十进制转二进制: 规则:除2取余倒排(除到商为0) 二进制转换成八进制: 规则:三位压成一位,从低位向高位压缩,不足三位补0。 000 <-> 0 001 <-> 1 010 <-> 2 011 <-> 3 100 <-> 4 101 <-> 5 110 <-> 6 111 <-> 7 例题: 八进制 二进制 363

进制转换

£可爱£侵袭症+ 提交于 2019-12-27 06:00:06
进制转换代码实现 题目描述 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 输入描述: 多组数据,每行为一个长度不超过30位的十进制非负整数。 (注意是10进制数字的个数可能有30个,而非30bits的整数) 输出描述: 每行输出对应的二进制数。 代码实现 int main ( int argc , const char * argv [ ] ) { char input [ 30 ] ; char output [ 100 ] ; int nlist [ 30 ] ; while ( scanf ( "%s" , input ) != EOF ) { int len = 0 ; int olen = 0 ; while ( input [ len ] != '\0' ) { nlist [ len ] = input [ len ] - '0' ; len ++ ; } while ( len > 0 ) { int i = 0 ; int j = 0 ; int a = 0 ; while ( i < len ) { int b = nlist [ i ] ; if ( b / 2 <= 0 && i == 0 ) { i ++ ; } else { nlist [ j ] = b / 2 + a * 5 ; i ++ ; j ++ ; } a = b % 2

NOIP2000TG T1 进制转换

Deadly 提交于 2019-12-23 05:51:31
题目链接 题意: 求$n$的$r$进制表示法$(r<0)$。 程序1(60pt): 若$r>0$,每次用$r$除$n$,记录余数,用商替换$n$,最后倒序输出余数。 然而这里$r<0$,直接整除可能会出现负的余数,然而没有负的数码,所以我们有 $n=\lfloor\frac{n}{d}\rfloor*d+r=(\lfloor\frac{n}{d}\rfloor+1)*d+(r-d)$ 于是出现负余数时候,除数$++$,余数减除数就可以了。 然而$r<-10$时,十个基础数码不够用了,于是$60pt$。 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int N=16; int n,r,s[N+3]; int main(){ scanf("%d%d",&n,&r); int nn=n; int p=0,a,b; while(n!=0){ p++; a=n/r; b=n%r; if(b<0){ a++; b=n-a*r; } n=a; s[p]=b; } printf("%d=",nn); for(int i=p;i>=1;i--) printf("%d",s[i]); printf("(base%d)

题解 P1017 【进制转换】

假如想象 提交于 2019-12-23 05:51:19
我赶jio这个题难道是让我们写快写? 不管了,赶紧把咕咕咕了一万年的题解写出来。 这个题就是考察负进制和 在mod意义下的除法运算的基础运算 。 (其实也没多大问题) 首先我们先假设一个原始数据 \(num\) 和基底 \(base(1\leq base\leq20)\) 然后不妨设 \(num=a*base+b\) (且$b = num\space mod\space a $ ) 重点来了! 如果 \(b<0\) ,我们就 \(b-base,a+1\) ,很明显这样做是正确的。 为啥呢?因为base是负数。负数减去一个比第一个负数大的负数肯定是个正数,而且不影响后面的数字的拆开。 (恒等变换自己拆开式子便知道了) 我们其实只需要 \(b\) 这一个数据,让 \(a*base\) 留在原来剩下的num中继续递归就可以。 最后一个 坑 : 窝一开始设的 char[]="0123456789ABCDEF" ,有两个错误: 没有'G' 输出基本是空的(我也不知道为啥 不管了放个cpp #include <iostream> #include <cstdio> #include <stack> #include <string> using namespace std; //用了string类型再错就去世 string str="0123456789ABCDEFG"; string

大数运算之进制转换

这一生的挚爱 提交于 2019-12-23 05:51:06
大数的之间的进制转换不能简单的用取余法来做,这样会导致溢出。以牛客网的这道题 10进制 vs 2进制 为例,题目给的数字已经达到了1000位,即使用long long类型也没办法存储,所以要用字符数组来存储。然后用 模拟手算除法 的方式来进行进制转换。 代码如下: #include<bits/stdc++.h> using namespace std; string conversion(int oldbase,string str,int newbase) { int len = str.size(); string s; for(int i = 0;i < len;) { int k = 0; for(int j = i;j < len;j++) { int temp = (k*oldbase + str[j] - '0')%newbase;//手算除法得到的余数 str[j] = (k*oldbase + str[j] - '0')/newbase +'0';//手算除法得到的商 k = temp; } s += char(k + '0'); while(str[i]=='0') i++; } reverse(s.begin(),s.end()); return s; } int main() { string num; while(cin >> num) { string

任意进制转换

随声附和 提交于 2019-12-19 21:16:08
每组输入数据共有三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16), 第二行是一个n进制数,若n>10则用大写字母A~F表示数码10~15,并且该n进制数对 应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。 16 FF 2 #include <iostream> #include <cstring> #include <stdio.h> using namespace std; char out[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; int i,n,m,s; char num[33]; int main() { while(scanf("%d",&n)!=-1) { scanf("%s%d",num,&m); for(s=i=0;i<strlen(num);++i) if(num[i]>='0'&&num[i]<='9') s=s*n+num[i]-'0'; else s=s*n+num[i]-'A'+10; for(i=0;s>0;s=s/m) num[i++]=out[s%m]; for(--i;i>=0;--i)putchar(num[i]); puts(""); } return 0; } 来源:

【Java进制转换】HDU-1197 Specialized Four-Digit Numbers

拈花ヽ惹草 提交于 2019-12-19 01:25:54
注解 1、Java进制转换函数的使用。 代码 public class Main { public static void main ( String [ ] args ) { for ( int i = 1000 ; i < 10000 ; i ++ ) { String ito10 = String . valueOf ( i ) ; String ito12 = Integer . toString ( i , 12 ) ; String ito16 = Integer . toHexString ( i ) ; int val10 = 0 ; int val12 = 0 ; int val16 = 0 ; for ( int j = 0 ; j < ito10 . length ( ) ; j ++ ) { val10 += ito10 . charAt ( j ) - '0' ; } for ( int j = 0 ; j < ito12 . length ( ) ; j ++ ) { if ( ito12 . charAt ( j ) >= '0' && ito12 . charAt ( j ) <= '9' ) { val12 += ito12 . charAt ( j ) - '0' ; } else { val12 += ito12 . charAt ( j )

2019-12-18

筅森魡賤 提交于 2019-12-18 13:26:54
进制转换 关于进制转换,计算机考试经常考到,很简单但看到题目后有的要反应半天。今天我总结一下所有进制转换的方法大全。 N——>D 权重法 D——>N 除法,余数倒排 B——>N 拆位,权重法 N——>B 逆向思考拆位,权重法 N1——>B——>N2 由于用D做中转站太麻烦,故通常用B 做中转站 十进制 decimal 二进制 binary 八进制 octonary 十六进制 hexadecimal 另外如果有计算机专业考研的同学,欢迎加QQ交流群617434557.后续会有计算机方面的资料。 来源: CSDN 作者: Tony.Jpj 链接: https://blog.csdn.net/weixin_45801844/article/details/103591245