4月1日复习题十进进数化为其它进制数

更新时间:2023-03-16 21:33:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

例1、 把十进数化为非十进制数。方法:短除法,倒取余数

例:15(10)=1111(2) 15(10)=17(8) 160(10)=A0(16) Var n,m,k,j,i:longint; a:array[1..100] of integer; begin

readln(n,m);

write(n,’(10)=’); k:=n;

while k<>0 do begin i:=i+1;

a[i]:=k mod m; k:=k div m; end;

for j:=i downto 1 do 必须考虑到转化为十六进进数的特殊情况 if (a[j]>9) then write(chr(a[j]+55)) else write(a[j]); write(‘(’,m,’)’);end.

例2、 非十进数转化为十进制数。1110111011 string L=10 11001(2)=1*2*2*2*2+1*2*2*2+0*2*2+0*2+1=25(10) A0(16)=160(10) Var s:ansistring; i,l,n,q,t,j:longint;

a:array[1..255] of integer; begin

readln(s); 必须分行输入,为什么? readln(n); L:=length(s);

for i:=1 to L do begin

if (s[i]>='A') and (s[i]<='F') then a[i]:=ord(s[i])-55; if (s[i]>='0') and (s[i]<='9') then a[i]:=ord(s[i])-48; t:=1;for j:=1 to L-I do t:=t*n; q:=q+ a[I]*t; end;

write(q); end.

例3、 编制一个不超过十六进制的数制转换程序 (中间桥梁:十进制) 456(8)=302(10)=100101110(2) var

a:array[0..100] of longint; s:string;

t,n,m,i,j,l,k:longint; begin

readln(s); readln(n,m); l:=length(s); for i:=1 to l do begin

if (s[i]>='A') and (s[i]<='Z') then a[i]:=ord(s[i])-55; if (s[i]>='0') and (s[i]<='9') then a[i]:=ord(s[i])-48; k:=1;

for j:=1 to l-i do k:=k*n; t:=t+a[i]*k; end;

writeln(t);

if m=10 then exit; l:=0;

while t<>0 do begin l:=l+1;

a[l]:=t mod m; t:=t div m; end;

for i:=l downto 1 do

if a[i]>9 then write(chr(a[i]+55)) else write(a[i]); end.

第二题 乐乐的数字

问题描述:

乐乐最近喜欢研究回文数,假设一个数从左到右读跟从右到左读的结果是一样的,那么我们说这个数是一个回文数。 如果一个数在十进制下是回文的,我们说这个数是一重回文数,如果一个数在十进制和二进制下是回文的,我们说这个数是二重回文数,如果一个数在三种进制下是回文的,我们说这个数是三重回文数……。现在我们用数字0..9,字母‘A’..‘Z’分别代表数字0..35(即10用A表示,11用B表示……,35用Z表示),任意给出一个10进制数,

乐乐想知道它在2至36进制里是多少重的回文数。 输入格式:

输入文件只有一个10进制的整数n(2<=n<=2000000000); 输出格式:

第一行为一个整数m,表示n在2至36进制里有m种是回文的; 接下来是m行,从小到大输出n在哪些进制下是回文的。 输入样例:

输出样例: 50

3

7 方法一:数值型:

9 label 10;

24 Var a,b:array[1..1000] of longint;

样例解释: i,k,n,j,t,x:longint;

50对应的7进制数为101,9进制数为55,24进制数为22。 Begin

readln(n);

for i:=2 to 36 do begin

k:=0;x:=n; while x>0 do begin k:=k+1 ;

a[k]:=x mod i; x:=x div i; end;

for j:=1 to k div 2 do if a[j]<>a[k+1-j] then goto 10; t:=t+1;b[t]:=i; 10:end; writeln(t);

for i:=1 to t do writeln(b[i]); end.

方法二:字符串型 label 10;

var a:packed array[1..10000]of string; n,k,t,i,x,j,m,b:longint;c:array[1..36]of longint; begin readln(n);

for i:=2 to 36 do begin

k:=0;x:=n;

while x>0 do begin k:=k+1; b:=x mod i;

if (b>=0) and (b<=9) then str(b,a[k]);

if (b>=10) and(b<=35) then a[k]:=chr(55+b); x:=x div i; end;

for j:=1 to k div 2 do if a[j]<>a[k+1-j] then goto 10; t:=t+1;c[t]:=i; 10:end;

writeln(t);

for i:=1 to t do writeln(c[i]); end.

方法三:字符型

var n,i,k,j,h,l,x,z:longint; b:array[1..36] of longint;

a:packed array[1..1000] of char; begin readln(n);

for i:=2 to 36 do begin

k:=n;j:=0;h:=0;

while k>0 do begin j:=j+1;

z:=k mod i; if (z>=0)and(z<=9) then a[j]:=chr(z+48); k:=k div i; if (z>=10)and(z<=35) then a[j]:=chr(z+55); end;

for l:=1 to j div 2 do if a[l]<>a[j+1-l] then begin h:=1;break;end; if h<>1 then begin x:=x+1;b[x]:=i;end; end;

writeln(x);

for i:=1 to x do writeln(b[i]); end.

Var a:array[1..1000] of string; Begin

Readln(n); n——任意一个十进制数 For i:=2 to 36 do Begin

K:=0; x:=n;

While x>0 do begin K:=k+1; b:=x mod I;

if (b>=0) and (b<=9) then str(b,a[k]); str将数值型转换为字符型 if (b>=10) and (b<=35) then a[k]:=chr(55+b);chr将序号转换为字符 X:=x div I; End;

For j:=1 to k div 2 do if a[j]<> a[k+1-j] then goto 10;

m:=m+1;c[m]:=I; End; 10:End;

Writeln(m);

For i:=1 to m do writeln(c[i]); End.

宁波市第十七届小学生信息学(计算机)复赛试题

学校 姓名 准考号 (考试时间:8:30---10:30) 注意:1、上机编程时要随时存盘

2、上机时,有问题请及时举手请老师解决。 3、编程开始后,不要关机。

*******************************************************************************************

试题一:(程序名:XX1-准考号末2位)

输入三个自然数,n,i,j(1<=i<=n,1<=j<=n),n表示有一个n行n列的棋盘格子, (i,j)表示棋盘中格子的位置

如:n=4,i=2,j=3表示了棋盘中的第二行第三列的格子,如下图: (2,3) (2,3)表示该格为第2行第3列

要求编制一个程序,根据输入的n,i,j的值,输出与格子(i,j)在同一行、同一列、同一对角线上的所有格子位置,例如:当n=4,i=2,j=3时,输出的结果是: (2,1)(2,2)(2,3)(2,4) {同一行格子的位置} (1,3)(2,3)(3,3)(4,3) {同一列格子的位置}

(1,2)(2,3)(3,4) {左上到右下对角线上的格子位置}

(4,1)(3,2)(2,3)(1,4) {左下到右上对角线上的格子位置}

试题二:(程序名:XX2-准考号末2位)

编制一个不超过十六进制的数制转换程序,即把一个A(2≤A≤16)进制的一个正整数转换为B(2≤B≤16)进制数。(说明:超过十进制数,除了数字0-9,还要用大写英文字母A,B,C,D,E,F作为数字。 程序运行举例:(把一个2进制数转换为16进制数)

输入please input:110100111 2 16 输出:110100111 (2)=1A7(16) 提示:110100111 (2)=423(10)= 1A7(16) 试题三:(程序名:XX3-准考号末2位) 题目如下:

设有N个正整数(N<=20),将它们联成一排,组成一个最大的多位整数。 例如:N=3时,3个整数13 312 343 联成的最大整数为:34331213; 又如:N=4时,4个整数7,13,4,246联成的最大整数为:7424613;

输入: N

N个正整数

输出:联成的最大多位整数。

2002年3月31日

宁波市第十七届小学生信息学(计算机)复赛试题

测试答案卷

试题一:(程序名:XX1-准考号末2位)

1、 输入:n=1,i=1,j=1; 输出结果正确得: 1分 2、 输入:n=2,i=2,j=2; 输出结果正确得: 2分 3、 输入:n=3, i=3,j=1; 输出结果正确得: 5分 4、 输入:n=5, i=3,j=5; 输出结果正确得: 7分 5、 输入:n=6, i=4,j=4; 输出结果正确得: 10分

试题二:(程序名:XX2-准考号末2位)

1、输入:110100111 2 8 输出:110100111(2)=647(8) 得: 4分 2、输入:647 8 16 输出:647(8)=1A7(16) 得: 6分 3、输入:173 8 10 输出:173(8)=123(10) 得: 6分

4、输入:181 10 16 输出:181(10)=B5(16) 得: 6分 5、输入:5724 8 5 输出:5724(8)=44103(5) 得: 8分 试题三:(程序名:XX3-准考号末2位) 测试数据如下:

序号 输入 输出 分值 1 3

121 21 3 321121 5 2 4

13 24 75 42 75422413 10 3 4

1341 133 1321 37 3713411331321 10 4 6

321 32 407 135 13 217 4073232121713513 15 机动数据:(如果以上全对,用下组数据测试,结果不对,扣15分) 5 9

323 325 321 32 3 35 322 13 1351 35332532332322321135113

本文来源:https://www.bwwdw.com/article/0puv.html

Top