=B[i]+1;
j:
=j+1;
end;{whilej}
ifB[i]=Mthen{找到所求便输出,并退出比较}
beginwriteln('A(',i,')=',A[i]);fd:
=true;end;
i:
=i+1;
end;{whilei}
End.
6、数制转换:
编程输入十进制N(N:
-32767~32767),请输出它对应的二
进制、八进制、十六进制数。
例如:
INPUTN(-32767~32767):
222
222TURNINTO2:
11011110
222TURNINTO8:
336
222TURNINTO16:
DE
[解]十进制数转化为某进制数的转换方法,如下图示:
除x逆序取余法
十进制数x进制数(x=2,8,16等)
例中n=222(十进制数),转换成x进制数的过程如下图示:
78
(1)十进制数→二进制数
(2)十进制数→八进制数(3)十进制数→十六进制数
x=2222被除数(最大商)x=82226x=16222E…(14)10
21110低位82731613D…(13)10
2501逆8330
2250余序0
2120数取
260余
231数
211高位
0(最大商为0时停止)
将每次所得的余数由下至上排列(逆序取余数),即有:
(222)10转换成二进制数得到:
1100010
(222)10转换成八进制数得到:
336
(222)10转换成十六进制数得到:
13、14
这时得到的逆序余数串(在数组B[1]、B[2]、……、B[k]中)的每位数均为十进制数。
程序中利用字符串A来计算x进制数的位数(即COPY(A,B[i]+1,1)),见下表:
数组B
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
字串A
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
下标i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
由上表得:
(222)10=(1100010)2=(336)8=(DE)16
[程序]
{$I-}
Programjj;
varN,k:
integer;
B:
array[1..1000]ofinteger;
Procedurechg10(N,x:
integer);{将十进制数N转换成x进制数}
Begink:
=0;{转换后的x进制数位的长度}
whileN<>0do{N不为0时}
beginB[k]:
=Nmodx;{除以x取余数}
N:
=NDivx;{取最大商N}
k:
=k+1;{x进制数位加1}
end;
end;{chg10}
ProcedureSput(N,x:
integer);{进制数输出}
VARi:
integer;A:
string;
BeginA:
='0123456789ABCDEF';{表示x进制数的位数串}
write(N:
6,'Turninto',x:
2,':
');
fori:
=k-1downto0dowrite(copy(A,B[i]+1,1));{逆序输出x进制数}
writeln;
end;{Sput}
begin{MAIN}
write('InputN(-32767to32767):
');readln(N);
if(N<=-32767)or(N>32767)then
beginwriteln('Inputerror!
');halt;end;
chg10(N,2);Sput(N,2);{十进制数转换成2进制数,并输出}
chg10(N,8);Sput(N,8);{十进制数转换成8进制数,并输出}
chg10(N,16);Sput(N,16);{十进制数转换成16进制数,并输出}
end._
79
编程入门题
(二)
1、求素数:
求2至N(2≤N≤500)之间的素数。
例如:
输入:
N=100
输出:
23571113
171923293137
414347535961
717379838997
total=24{表示2至100之间的素数有24个}
[解法一]素数是指除1及本身以外不能被其他数整除的自然数。
下面介绍用穷举法求素数。
1.2是素数;t=0;
2.I=2~n,则:
(1)如果i是素数,则其必须是奇数且不能被2~√i中的任一个数整除。
(2)如果I是素数,则输出该素数且计数器t=t+1;
3.输出2~N之间素数的总数