主题:[讨论]输入一个十进制正整数,将它转化成十六进制数输出
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.
分析:一个十进制数转化成十六进制一般采用除以十六取余的方法,即当被除到的余数不为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.