150 likes | 300 Views
数 制 (二). 2011 初赛选择题专题. 转换规律. n 进制转换成 10 进制 按权展开 10 转换成 n 进制, 整数部分 逆向取余 小数部分 正向取整. (12tg) 与十进制数 1770.625 对应的八进制数是( )。 A. 3352.5 B. 3350.5 C. 3352.1161 D. 3350.1151 E. 前 4 个答案都不对 (11tg) (3725)8 + (B)16 的运算结果是( )。
E N D
数 制 (二) 2011初赛选择题专题
转换规律 • n进制转换成10进制 按权展开 • 10转换成n进制,整数部分 逆向取余小数部分 正向取整
(12tg) 与十进制数 1770.625 对应的八进制数是( )。 A. 3352.5 B. 3350.5 C. 3352.1161 D. 3350.1151 E. 前 4 个答案都不对 (11tg) (3725)8 + (B)16的运算结果是( )。 A. (3736)8 B. (2016)10 C. (11111100000)2 D. (3006)10 E. (7E0)16
16 16
实用技巧 • 二进制度可以和八与十六进制直接互相转化 • 请同学们仔细观察 • (1967)10=(7AF)16 • =(11110101111)2 • =(3657)8 11tg) (3725)8 + (B)16的运算结果是( )。 A. (3736)8 B. (2016)10 C. (11111100000)2 D. (3006)10 E. (7E0)16
小数点不动数字向右移动 (11)2/21= 1.1 36/101= 3.6 (11)2/22= 0.11 36/102= 0.36 11*21= 110 36*101= 360 1100 11*22= 36*102= 3600 小数点不动数字向左移动 3 shl 1=6 x SHR n 把x换成二进制后向右移n位,相当于 把x 除以 2n x SHL n 把x换成二进制后向左移n位,相当于 把x 乘以 2n
(8tg)十进制书11/128可用二进制数码序列表示为:( )。 • A)1011/1000000 B)1011/100000000 C)0.001011 D)0.0001011
二进制计算 二进制的算术运算 1、加法运算规则: 0+0=0 0+1=1 1+0=1 1+1=10 2、减法运算规则: 0-0=0 0-1=1(向高位借1) 1-0=1 1-1=0 3、乘法运算规则: 0×0=0 0×1=0 1×0=0 1×1=1 说明:*2相当于小数点向右移如1101*2=11010 /2相当于小数点向左移 如1101/2=110.1 正如56*10=560 56/10=5.6
2010选择题第五题 • 5.如果在某个进制下等式7*7=41成立,那么在该进制下等式12*12=( )也成立。 • A. 100 B. 144 C. 164 D. 196 • 7*7=41就可以得出这1 2进制 • 然后1 2* 1 2先转换成10进制是14*14=196 • 196化成1 2进制是144
题1258:【基础】任意进制转换 Description 将十进制整数n,转换成b进制。 Input 一行,两个整数 n b ( 1 <= n <= 32767, 2 <= b <= 20 )。 Output 一行,为n转换成b进制后的数。 Sample Input 示例1:19 8 示例2:1229 16 Sample Output 示例1:23 示例2:4CD Hint While n<> 0 do begin inc(t); a[t]:=n mod 2; n:=n div 2 End. a[1]: 逆向取余 如果是16进制,余数会如何
program ex1258; const s:array[0..19] of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J'); var i,t,n,b,x:integer; a:array[1..20] of char; begin readln(n,b); t:=0; while n<>0 do begin inc(t); x:=n mod b; a[t]:=s[x]; n:=n div b; end; for i:=t downto 1 do write(a[i]); end. 15 9 1
题1288:【基础】二进制转十进制 Description 将二进制数转成十进制输出。 Input 一行,一个二进制数,二进制数的位数小于32位。 Output 一个十进制的整数。 Sample Input 11 Sample Output 3 program ex1288; var i,k,len:integer; st:string; x,t:longint; begin readln(st); len:=length(st); t:=1; for i:=len downto 1 do begin val(st[i],k); {把字符串中某一位转换成数} x:=x+k*t; t:=t*2; {生成权1,2,4,8……} end; writeln(x); end. (11110101111)2=(1967)10 11110101111
思考题目 • 输入十进制转换为二进制,小数部分精确到5位
program ex; var w,zx:longint;n,xx:real; function makez(x:longint):string; var s,st:string;t:integer; begin st:=''; while x<>0 do begin t:=x mod 2; x:=x div 2; str(t,s); st:=s+st; {实现整数部分逆向} end; makez:=st; end; function makex(x:real):string; var i:integer;s,st:string;t:integer; begin st:=''; for i:=1 to w do begin x:=x*2; t:=trunc(x); str(t,s); st:=st+s; {实现小数部分逆向} x:=x-t; end; makex:=st; end; begin readln(n,w); zx:=trunc(n); xx:=n-zx; write(makez(zx)); if xx<>0 then begin write('.'); write(makex(xx)); end; end.