回 帖 发 新 帖 刷新版面

主题:[讨论]输入一个十进制正整数,将它转化成十六进制数输出

2.输入一个十进制正整数,将它转化成十六进制数输出.

    分析:一个十进制数转化成十六进制一般采用除以十六取余的方法,即当被除到的余数不为0时就将当前的数字除以16作为下一次的被除数,同时记下余数,最后将所有的余数按被除出的顺序反向输出.
    被除数和余数都可以用整数类型来表示,但是合成后输出的十六进制数因为有字符A~F而只能考虑用字符串类型,这样就存在着一个将整数类型的余数转化为字符(串)类型的过程.参考程序中采用了跳转表.
    它的原理是通过定义字符数组常量来实现将数字转化成对应的十六进制字符.程序中定义了一个N2C数组,数组元素的值是字符"0"..."F",分别对应着下标0...15.所以简单地通过类似于查表的方法即可由N2C[i]求得整数i对应的字符.
    程序如下:
const
   N2C:array[0..15] of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
var n:integer;
    s:string;
    i:integer;
begin
     readln(n);s:='';
     while n>0 do
         begin
            i:=n mod 16;
            s:=N2C[i]+s;{最后的输出应该是反向输出,所以这里将余数对应的字符添在输出串的前面}
            n:n div 16;{n是否可以不要,就是i代替}
         end;
     writeln(s);
end.

回复列表 (共5个回复)

沙发

其实 一个函数就行了:
program xxx;

uses
   SysUtils;
{$apptype console}
begin
writeln(inttohex(65535,4));
end.

输出: ffff

板凳

也可以用数据结构的栈.

3 楼

好像很高深,,,,,完全不懂你说什么~~~~谢谢


但从这个题的解看~
n是否可以不要,就是i代替

4 楼

用个递归 万事大吉!
program cxxx401;
  var i,n:integer;
procedure work(n:Integer);
   var m:integer;
begin
   if n=0 then exit
   else begin
          m:=n mod 16;
          work(n div 16);
           case m of
            10:write('A');11:write('B');12:write('C');
            13:write('D');14:write('E');15:write('F');
            else write(m);
           end;
        end;
end;
begin
  read(n);
  work(n);
  writeln;
end.

5 楼

哎~~~我其实想问一下~~~~~
从这个题的解看~
n是否可以不要,就是i代替


方法有很多~这个我知道~~~~请回答上面的~~问题ok?

我来回复

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