回 帖 发 新 帖 刷新版面

主题:新手的数制转换问题~(30+20分)~

我知道如何将十进制数转成二、八、十六进制书,也知道二、八、十六进制转十进制数,但谁能告诉一下,有没有通用的程序,可以使得十六进制以下的数制转换通用,如二进制数转三进制数……的程序。我是新手,帮帮忙~[em18][em18][em18][em18][em18]

回复列表 (共5个回复)

沙发

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下通过。

板凳

把n进制换成m进制,简单的做法,就是先把n进制转换成10进制,再转换成m进制

3 楼

晕,我用的TP~

4 楼

TP也可以,不过要安装CRT补丁

5 楼

在哪儿有下?

我来回复

您尚未登录,请登录后再回复。点此登录或注册