将数字符号按序排列成数位,并遵照某种由低位到高位的进位方式计数表示数值的方法,称做进位计数制,简称进制。
掌握常见数字的不同进制表示。
熟悉二、八、十六进制的相互转换原理。
1.不同进制转换的基本算法是:
⑴ 十进制数(y)转换成任意进制数(n)的方法:将十进制数除以n进制反序求余。
⑵将任意进制数转换成十进制数的方法:按“权”展开;
⑶二进制、八进制、十六进制之间的转换方法:利用3位二进制表示一位八进制数,4位二进制数表示1位十六进制的数的方法
2.不同进制数的转换
⑴十进制整数转换成任意进制:除以进制数反向求余。
设任意进制数x,十进制数y,则其算法模式是:
重复做:
t:=t+1;
y mod x 的余数 a(t)
y:=y div x
直到y=0为止。
输出则从最高位a(t)到第一位a(1)。
⑵任意进制整数转换成十进制:按权展开
设任意进制n数为x,按权展开的模式是:
(1101)2 =1×23+ 1×22+ 1×21+ 1×20=13
【例题1】将十进制整数转换成任意进制的数
program shijinzhi;
var a:array[1..50] of integer;
n,x,y,i:integer;
begin
write('imput number x,y:');
read(x,y);
writeln;
i:=0;
repeat
i:=i+1;
a[i]:=y mod x;
y:=y div x;
until y=0;
for n:=i downto 1 do
write(a[n]);
writeln;
end.
【例题2】将任意进制的整数转换成十进制数
program renyijinzhi;
const m=20;
var str1:string;str2:char;
n,i,l,y,t:integer;
x:longint;
a:array[1..m] of integer;
begin
writeln('imput number x,n:');
readln(x,n);
str(x,str1);
l:=length(str1);
for i:=1 to l do
begin
str2:=str1[i];
a[i]:=ord(str2)-ord('0');
end;
y:=1; t:=a[l];
for i:=i-1 downto 1 do
begin
if a[i]>n then
begin
writeln('error');
exit;
end;
y:=y*n;
t:=t+a[i]*y;
end;
writeln(x,'---->',t);
end.
用三进制数求解数学问题。
用质量为1g,3g,9g,27g和81g的砝码称物体的质量,最大可称121g。如果砝码允许放在天平的两边,编程输出称不同物体时砝码应该怎样安排?例如m=14时,m+9+3+1=27或m=
【程序实现】
program sanjinzhi;
var a,b,c,d,e,m:integer;
begin
for m:=1 to 121 do
for a:=0 to 1 do
for b:=-1 to 1 do
for c:=-1 to 1 do
for d:=-1 to 1 do
for e:=-1 to 1 do
if m=a*81+b*27+c*9+d*3+e then
begin
writeln(m,’=’,a*81,’+(’,b*27,’)+(’,c*9, ’)+(’,d*3, ’)+(’,e,’)’);
readln;
end;
end.