回 帖 发 新 帖 刷新版面

主题:[讨论]高手请进

小弟有一题不明,望各位高手解答:用turbo pascal解,编程使任一四位十六进制化成十进制.
小弟感激不尽!

回复列表 (共6个回复)

沙发

我程序可把n进制数转为10进制数.
program turn;;
var cf,s,i,j,n:longint;
    m:string;
    a:array [1..1000] of byte;
begin
  writeln('input m,n');{n:进制 m:数}
  fillchar(a,sizeof(a),0);
  readln(m,n);
  for i:=1 to length(m) do
  begin
    if (m[i]<='9') and (m[i]>='0') then a[i]:=ord(m[i])-48;
    if (upcase(m[i])<='F')and (upcase(m[i])>='A') then a[i]:=ord(upcase(m[i]))-55;
    if a[i]>=n then
    begin
      writeln('Error!');
      halt;
    end;
  end;
  cf:=1;
  s:=a[length(m)];
  for i:=length(m)-1 downto 1 do
  begin
    cf:=cf*n;
    s:=s+a[i]*cf;
  end;
  writeln('(',m,')',n,'=',s);
end.

板凳

请问高手,能否直接用子界类型来算?

3 楼

加以字符型?

4 楼

小弟还是初学者,能否用简单一些的...别用数组?

5 楼

program xxxxxxxx;
var s,t,i,j:longint;
    ch:char;
begin
  s:=0;
  t:=0;
  for i:=1 to 4 do
  begin
    t:=1;
    for j:=1 to 4-i do
      t:=t*16;
    read(ch);
    s:=s+(ord(upcase(ch))-55)*t;
  end;
  writeln(s);
end.

6 楼

“编程使任一四位十六进制化成十进制” 
Turbo Pascal下$ABCD,即为16进制,但这本身就是整型,无须转换。
如果这个4位十六进制是字串类型,不妨定义
type
    str4=string[4];
下面是两个函数:
program t0;
type
    str4=string[4];
function IntToStr(n:word):str4;assembler;整型转换字串型。
asm
        mov     ax,[bp+4]
        les     di,[bp+6]
        mov     cl,4
        mov     es:[di],cl
        inc     di
        xor     ch,ch

@@1:    rol     ax,1
        rol     ax,1
        rol     ax,1
        rol     ax,1
        mov     dl,al
        and     dl,0fh
        or      dl,030h
        cmp     dl,'9'
        ja      @@2
        jmp     @@3
@@2:    add     dl,7
@@3:
        mov     es:[di],dl
        inc     di
        loop    @@1
end;
function StrToInt(s:str4):word;assembler;字串型转换为整型。
asm
        les     di,[bp+4]
        inc     di
        xor     ax,ax
        mov     cx,4
@@1:
        shl     ax,1
        shl     ax,1
        shl     ax,1
        shl     ax,1
        mov     dl,es:[di]
        cmp     dl,'9'
        ja      @@2
        jmp     @@3
@@2:    sub     dl,7
@@3:
        and     dl,0fh
        cmp     dl,9
        or      al,dl
        inc     di
        loop    @@1
end;
var
   i,t:word;
   s:str4;
   tf:text;
begin
     assign(tf,'a.txt');
     rewrite(tf);
     for i:=0 to 100 do
         begin
              s:=IntToStr(i);
              t:=StrToInt(s);
              write(tf,s:5,t:4,' ');
              if (i+1)mod 5=0 then writeln(tf);
         end;
     close(tf);
end.

a.txt文件内容如下:
 0000   0  0001   1  0002   2  0003   3  0004   4 
 0005   5  0006   6  0007   7  0008   8  0009   9 
 000A  10  000B  11  000C  12  000D  13  000E  14 
 000F  15  0010  16  0011  17  0012  18  0013  19 
 0014  20  0015  21  0016  22  0017  23  0018  24 
 0019  25  001A  26  001B  27  001C  28  001D  29 
 001E  30  001F  31  0020  32  0021  33  0022  34 
 0023  35  0024  36  0025  37  0026  38  0027  39 
 0028  40  0029  41  002A  42  002B  43  002C  44 
 002D  45  002E  46  002F  47  0030  48  0031  49 
 0032  50  0033  51  0034  52  0035  53  0036  54 
 0037  55  0038  56  0039  57  003A  58  003B  59 
 003C  60  003D  61  003E  62  003F  63  0040  64 
 0041  65  0042  66  0043  67  0044  68  0045  69 
 0046  70  0047  71  0048  72  0049  73  004A  74 
 004B  75  004C  76  004D  77  004E  78  004F  79 
 0050  80  0051  81  0052  82  0053  83  0054  84 
 0055  85  0056  86  0057  87  0058  88  0059  89 
 005A  90  005B  91  005C  92  005D  93  005E  94 
 005F  95  0060  96  0061  97  0062  98  0063  99 
 0064 100

我来回复

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