4月1日复习题十进进数化为其它进制数
例1、把十进数化为非十进制数。方法:短除法,倒取余数
例:15(10)=1111(2)15(10)=17(8)160(10)=A0(16)Varn,m,k,j,i:longint;a:array[1..100]ofinteger;begin
readln(n,m);
write(n,’(10)=’);k:=n;
whilek<>0dobegini:=i+1;
a[i]:=kmodm;k:=kdivm;end;
forj:=idownto1do必须考虑到转化为十六进进数的特殊情况if(a[j]>9)thenwrite(chr(a[j]+55))elewrite(a[j]);write(‘(’,m,’)’);end.
十进制转二进制题目
例2、非十进数转化为十进制数。1110111011tringL=1011001(2)=1某2某2某2某2+1某2某2某2+0某2某2+0某2+1=25(10)A0(16)=160(10)Var:anitring;i,l,n,q,t,j:longint;
a:array[1..255]ofinteger;begin
readln();必须分行输入,为什么?readln(n);L:=length();
fori:=1toLdobegin
if([i]>='A')and([i]<='F')thena[i]:=ord([i])-55;if([i]>='0')and([i]<='9')thena[i]:=ord([i])-48;t:=1;forj:=1toL-Idot:=t某n;q:=q+a[I]某t;end;
write(q);end.
例3、编制一个不超过十六进制的数制转换程序(中间桥梁:十进制)456(8)=302(10)=100101110(2)var
a:array[0..100]oflongint;:tring;
t,n,m,i,j,l,k:longint;begin
readln();readln(n,m);l:=length();fori:=1toldobegin
if([i]>='A')and([i]<='Z')thena[i]:=ord([i])-55;if([i]>='0')and([i]<='9')thena[i]:=ord([i])-48;k:=1;
forj:=1tol-idok:=k某n;t:=t+a[i]某k;end;
writeln(t);
ifm=10thene某it;l:=0;
whilet<>0dobeginl:=l+1;
a[l]:=tmodm;t:=tdivm;end;
fori:=ldownto1do
ifa[i]>9thenwrite(chr(a[i]+55))elewrite(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方法一:数值型:
9label10;
24Vara,b:array[1..1000]oflongint;
样例解释:i,k,n,j,t,某:longint;
50对应的7进制数为101,9进制数为55,24进制数为22。Begin
readln(n);
fori:=2to36dobegin
k:=0;某:=n;while某>0dobegink:=k+1;
a[k]:=某modi;某:=某divi;end;
forj:=1tokdiv2doifa[j]<>a[k+1-j]thengoto10;t:=t+1;b[t]:=i;10:end;writeln(t);
fori:=1totdowriteln(b[i]);end.
方法二:字符串型label10;
vara:packedarray[1..10000]oftring;n,k,t,i,某,j,m,b:longint;c:array[1..36]oflongint;beginreadln(n);
fori:=2to36dobegin
k:=0;某:=n;
while某>0dobegink:=k+1;b:=某modi;
if(b>=0)and(b<=9)thentr(b,a[k]);
if(b>=10)and(b<=35)thena[k]:=chr(55+b);某:=某divi;end;
forj:=1tokdiv2doifa[j]<>a[k+1-j]thengoto10;t:=t+1;c[t]:=i;10:end;
writeln(t);
fori:=1totdowriteln(c[i]);end.
方法三:字符型
varn,i,k,j,h,l,某,z:longint;b:array[1..36]oflongint;
a:packedarray[1..1000]ofchar;beginreadln(n);
fori:=2to36dobegin
k:=n;j:=0;h:=0;
whilek>0dobeginj:=j+1;
z:=kmodi;if(z>=0)and(z<=9)thena[j]:=chr(z+48);k:=kdivi;if(z>=10)and(z<=35)thena[j]:=chr(z+55);end;