主题:新手的数制转换问题~(30+20分)~
zhaoren
[专家分:420] 发布于 2005-09-10 12:05:00
我知道如何将十进制数转成二、八、十六进制书,也知道二、八、十六进制转十进制数,但谁能告诉一下,有没有通用的程序,可以使得十六进制以下的数制转换通用,如二进制数转三进制数……的程序。我是新手,帮帮忙~[em18][em18][em18][em18][em18]
沙发
kuuga [专家分:190] 发布于 2005-09-10 14:34:00
uses crt;
var m,n,i,k,p,l,z,si,kj,pp,he,io,hua,bb,cc,lon:integer;
sa,s1,s2,s3,rr,lk,sb,lu:string;
b:array[0..100]of integer;
lo:array[1..100]of integer;
ha:real;
kkk:boolean;
function t2(sa:string;m:integer):integer;
var s:string;
i,z,y,x,k,z1:integer;
begin
z:=0;
s1:='';
x:=0;
s:='123456789ABCDEF';
for i:=length(sa) downto 1 do begin
y:=pos(sa[i],s);
z1:=1;
for k:=1 to z do z1:=z1*m;
x:=x+z1*y;
inc(z);
end;
t2:=x;
end;
procedure t(a,m:integer);
var l:integer;
begin
k:=0;
l:=a;
while l<>0 do begin
a:=a mod m;
b[k]:=a;
l:=l div m;
a:=l;
inc(k);
end;
end;
procedure t1(a,m:integer);
var so,sko:string;
io:integer;
begin
if rr='-' then sko:='-' else sko:='';
so:='0123456789ABCDEF';
for io:=k-1 downto 0 do sko:=sko+so[b[io]+1];
write(sko);
end;
begin
clrscr;
write('Number:');
readln(lk);
if pos('.',lk)<>0 then begin
sb:='';
sa:=copy(lk,1,pos('.',lk)-1);
for pp:=pos('.',lk)+1 to length(lk)do sb:=sb+lk[pp];
sb:='0.'+sb;
end else sa:=lk;
if sa[1]='-' then begin
delete(sa,1,1);
rr:='-';
end;
write('Type:');
readln(m);
s3:='123456789ABCDEF';
for l:=1 to length(sa)do begin
val(sa[l],kj);
if(kj>m-1)or(pos(sa[l],s3)=0)and(sa[l]<>'0')then begin
writeln('The number is not this type.');
readln;
halt;
end;
end;
kkk:=true;
for cc:=3 to length(sb)+1 do begin
val(sb[cc],lon);
if(lon>n-1)or(pos(sb[cc],s3)=0)and(sb[cc]<>'0')then
kkk:=false;break;
end;
if kkk=false then begin
writeln('The number is not this type.');
readln;
halt;
end;
write('Output"s Type:');
readln(n);
si:=t2(sa,m);
if rr='-' then write('(','-',sa,')',m,' turn into Type
',n,' is ')else write('(',sa,')',m,' turn into Type
',n,' is ');
t(si,n);
t1(si,n);
if k=0 then write('0');
write('.');
if sb<>'' then begin
val(sb,ha);
io:=0;
bb:=0;
repeat
ha:=ha*n;
he:=trunc(ha);
ha:=ha-he;
inc(io);
lo[io]:=he;
until ha=0;
for hua:=1 to io do write(lo[hua]);
write('.');
end;
readln;
end.
已在FP下通过。