十六进制转换,请用free Pascal语言编写代码?
【试题描述】输入一个不超过100000位的十六进制数,请转换成八进制数。注:十六进制数中,字母0-9还对应表示数字0-9,字母“A”(大写)表示10,“B”表示11,…,...
【试题描述】
输入一个不超过100000位的十六进制数,请转换成八进制数。
注:十六进制数中,字母0-9还对应表示数字0-9,字母“A”(大写)表示10,“B”表示11,…,“F”表示15。比如:十六进制A10B表示的10进制数是:10*16^3+1*16^2+0*16^1+11*16^0=41227。转换成八进制数是:120413,因为1*8^5+2*8^4+0*8^3+4*8^2+1*8^1+3*8^0=41227。
【输入描述】
一个十六进制数,没有前导0(除非是数字0)。
【输出描述】
一个八进制数,没有前导0(除非是数字0)。
【输入样例】
123ABC
【输出样例】
4435274 展开
输入一个不超过100000位的十六进制数,请转换成八进制数。
注:十六进制数中,字母0-9还对应表示数字0-9,字母“A”(大写)表示10,“B”表示11,…,“F”表示15。比如:十六进制A10B表示的10进制数是:10*16^3+1*16^2+0*16^1+11*16^0=41227。转换成八进制数是:120413,因为1*8^5+2*8^4+0*8^3+4*8^2+1*8^1+3*8^0=41227。
【输入描述】
一个十六进制数,没有前导0(除非是数字0)。
【输出描述】
一个八进制数,没有前导0(除非是数字0)。
【输入样例】
123ABC
【输出样例】
4435274 展开
4个回答
展开全部
program change;
var i,m,n,v,t:longint;
ch:char;
num:string;
begin
readln(n);
readln(num);
readln(m);
v:=0;
for i:=1 to length(num) do
begin
case num[i] of
'0': t:=0;
'1': t:=1;
'2': t:=2;
'3': t:=3;
'4': t:=4;
'5': t:=5;
'6': t:=6;
'7': t:=7;
'8': t:=8;
'9': t:=9;
'A': t:=10;
'B': t:=11;
'C': t:=12;
'D': t:=13;
'E': t:=14;
'F': t:=15;
end;
v:=v*n+t
end;
num:='';
while v<>0 do
begin
case v mod m of
0: ch:='0';
1: ch:='1';
2: ch:='2';
3: ch:='3';
4: ch:='4';
5: ch:='5';
6: ch:='6';
7: ch:='7';
8: ch:='8';
9: ch:='9';
10: ch:='A';
11: ch:='B';
12: ch:='C';
13: ch:='D';
14: ch:='E';
15: ch:='F';
end;
num:=ch+num;
v:=v div m
end;
writeln(num);
end.
ps:这是一个2~16进制之间可以互相转化的一个程序
n为原进制
num为原进制的数
m为要转化成的进制
你自己改一下就可以了
var i,m,n,v,t:longint;
ch:char;
num:string;
begin
readln(n);
readln(num);
readln(m);
v:=0;
for i:=1 to length(num) do
begin
case num[i] of
'0': t:=0;
'1': t:=1;
'2': t:=2;
'3': t:=3;
'4': t:=4;
'5': t:=5;
'6': t:=6;
'7': t:=7;
'8': t:=8;
'9': t:=9;
'A': t:=10;
'B': t:=11;
'C': t:=12;
'D': t:=13;
'E': t:=14;
'F': t:=15;
end;
v:=v*n+t
end;
num:='';
while v<>0 do
begin
case v mod m of
0: ch:='0';
1: ch:='1';
2: ch:='2';
3: ch:='3';
4: ch:='4';
5: ch:='5';
6: ch:='6';
7: ch:='7';
8: ch:='8';
9: ch:='9';
10: ch:='A';
11: ch:='B';
12: ch:='C';
13: ch:='D';
14: ch:='E';
15: ch:='F';
end;
num:=ch+num;
v:=v div m
end;
writeln(num);
end.
ps:这是一个2~16进制之间可以互相转化的一个程序
n为原进制
num为原进制的数
m为要转化成的进制
你自己改一下就可以了
追问
二进制转八进制的程序有吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//利用3位十六进制数与4位八进制数的数值范围相同的原理进行转换
function HexToOct(HexStr: AnsiString): AnsiString;
var
OctStr: AnsiString;
Len, Dec, i: Integer;
s: string;
begin
Len := Length(HexStr);
OctStr := '';
while Len > 3 do
begin
s := Copy(HexStr, Len - 2, 3); //每次从字符串中取三个十六进制数,从数尾开始
Len := Len - 3;
Dec := StrToInt('$' + s); //将十六进制的字符串转为数字来参与计算
for i := 0 to 3 do
begin
OctStr := Chr($30 + Dec and $07) + OctStr; //转为八进制数
Dec := Dec shr 3;
end;
end;
Dec := StrToInt('$' + Copy(HexStr, 1, Len));
for i := 0 to 3 do
begin
OctStr := Chr($30 + Dec and $07) + OctStr;
Dec := Dec shr 3;
if Dec = 0 then break;
end;
Result := OctStr;
end;
function HexToOct(HexStr: AnsiString): AnsiString;
var
OctStr: AnsiString;
Len, Dec, i: Integer;
s: string;
begin
Len := Length(HexStr);
OctStr := '';
while Len > 3 do
begin
s := Copy(HexStr, Len - 2, 3); //每次从字符串中取三个十六进制数,从数尾开始
Len := Len - 3;
Dec := StrToInt('$' + s); //将十六进制的字符串转为数字来参与计算
for i := 0 to 3 do
begin
OctStr := Chr($30 + Dec and $07) + OctStr; //转为八进制数
Dec := Dec shr 3;
end;
end;
Dec := StrToInt('$' + Copy(HexStr, 1, Len));
for i := 0 to 3 do
begin
OctStr := Chr($30 + Dec and $07) + OctStr;
Dec := Dec shr 3;
if Dec = 0 then break;
end;
Result := OctStr;
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
任意进制间的互化。
把n进制的M转化成k进制表示
如m=ff n=16 k=2
则有 (ff)16=(11111111)2
【参考程序】
var s,n,k:longint;m:string[20];
a:array [1..100] of byte;
procedure first(m:string;n:integer); {把数m化成十进制}
var cf,i,j:longint;
begin
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, Invaild m !');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;
write('(',m,')',n);write('=(',s,')10');
end;
procedure second(m,n:longint); {把十进制的数化成k进制}
var i,j:longint;
begin
i:=0;
repeat
i:=i+1;
a[i]:= m mod n;
m:=m div n;
until m=0;
write('=(');
for j:=i downto 1 do
if a[j]>9 then write(chr(a[j]+55))
else write(a[j]);
writeln(')',n);readln;
end;
begin
fillchar(a,sizeof(a),0);
writeln('input m,n,k:'); {m:数, n:原先进制, k:化成什么进制}
readln(m,n,k);
first(m,n); {把n进制的m化成十进制数S}
second(s,k); {把S化成k进制}
end.
把n进制的M转化成k进制表示
如m=ff n=16 k=2
则有 (ff)16=(11111111)2
【参考程序】
var s,n,k:longint;m:string[20];
a:array [1..100] of byte;
procedure first(m:string;n:integer); {把数m化成十进制}
var cf,i,j:longint;
begin
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, Invaild m !');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;
write('(',m,')',n);write('=(',s,')10');
end;
procedure second(m,n:longint); {把十进制的数化成k进制}
var i,j:longint;
begin
i:=0;
repeat
i:=i+1;
a[i]:= m mod n;
m:=m div n;
until m=0;
write('=(');
for j:=i downto 1 do
if a[j]>9 then write(chr(a[j]+55))
else write(a[j]);
writeln(')',n);readln;
end;
begin
fillchar(a,sizeof(a),0);
writeln('input m,n,k:'); {m:数, n:原先进制, k:化成什么进制}
readln(m,n,k);
first(m,n); {把n进制的m化成十进制数S}
second(s,k); {把S化成k进制}
end.
追问
可是16进制的数含有一些字母,这样写不能处理16进制,读不进。
追答
可以的,m是字符串,而不是数字,把字符读进去再判断,这里你稍作修改就行了的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
program testcase;
Uses sysutils;
var hex,result:string;
hex_len,i,ch,chv,value,bits: Integer;
good_char : boolean;
begin
writeln('Please input a HEX string:');
readln(hex);
hex_len:=length(hex);
hex:=UpperCase(hex);//统一转换成大写
//writeln('Total number of Chars:',hex_len);
//writeln('b:',(127 shr 1));
bits:=0;
value:=0;
result:='';
for i:=hex_len downto 1 do
begin
ch:=ord(hex[i]);
//writeln('ch:',ch);
if (ch>=48) and (ch <=57) then
begin
chv:=ch-48; {chv=ch -'a'}
//write( chv);
good_char:=True;
end
else
begin
if (ch >=65) and (ch <=90) then
begin
chv:=ch-65+10;
good_char:=True;
end
else
//忽略非法字符
good_char:=False;
;
end;
if good_char then
begin
value := value + (chv shl bits);
bits+=4;
while bits>=3 do
begin
chv:=value and 7;
result:=chr(chv+48)+result;
value:= value shr 3;
bits:=bits-3;
end;
end;
end;
if (bits>0) and (value<>0) then
begin
chv:=value and 7;
result:=chr(chv+48)+result;
end;
if (result[1]='0') and (length(result)>1) then
Delete(result,1,1);
writeln('Result:',result);
writeln('Press ENTER to end the program.');
readln;
end.
================
一直总想学pascal,可没有机会。拿着你的题练了一下。
FreePascal2.4编译器,16进制转8进制输出:
Please input a HEX string:
ffffff
Result:77777777
Press ENTER to end the program.
Please input a HEX string:
123abc
Result:4435274
Press ENTER to end the program.
感觉Pascal真够古拙的。比c系更接近自然语言英语,更接近伪代码。
方便的string,集合,特别是更严格地遵循结构化编程的原则。
由于严格连垃圾回收都不需要。
Statement,“语句”这种概念在现代编程语言都很难找到了
(感慨。。 开始很不适应end. 还是end; 还是end。哈哈)
总之,在Java没出来之前,的确是一个好且强大的高级应用语言。
Uses sysutils;
var hex,result:string;
hex_len,i,ch,chv,value,bits: Integer;
good_char : boolean;
begin
writeln('Please input a HEX string:');
readln(hex);
hex_len:=length(hex);
hex:=UpperCase(hex);//统一转换成大写
//writeln('Total number of Chars:',hex_len);
//writeln('b:',(127 shr 1));
bits:=0;
value:=0;
result:='';
for i:=hex_len downto 1 do
begin
ch:=ord(hex[i]);
//writeln('ch:',ch);
if (ch>=48) and (ch <=57) then
begin
chv:=ch-48; {chv=ch -'a'}
//write( chv);
good_char:=True;
end
else
begin
if (ch >=65) and (ch <=90) then
begin
chv:=ch-65+10;
good_char:=True;
end
else
//忽略非法字符
good_char:=False;
;
end;
if good_char then
begin
value := value + (chv shl bits);
bits+=4;
while bits>=3 do
begin
chv:=value and 7;
result:=chr(chv+48)+result;
value:= value shr 3;
bits:=bits-3;
end;
end;
end;
if (bits>0) and (value<>0) then
begin
chv:=value and 7;
result:=chr(chv+48)+result;
end;
if (result[1]='0') and (length(result)>1) then
Delete(result,1,1);
writeln('Result:',result);
writeln('Press ENTER to end the program.');
readln;
end.
================
一直总想学pascal,可没有机会。拿着你的题练了一下。
FreePascal2.4编译器,16进制转8进制输出:
Please input a HEX string:
ffffff
Result:77777777
Press ENTER to end the program.
Please input a HEX string:
123abc
Result:4435274
Press ENTER to end the program.
感觉Pascal真够古拙的。比c系更接近自然语言英语,更接近伪代码。
方便的string,集合,特别是更严格地遵循结构化编程的原则。
由于严格连垃圾回收都不需要。
Statement,“语句”这种概念在现代编程语言都很难找到了
(感慨。。 开始很不适应end. 还是end; 还是end。哈哈)
总之,在Java没出来之前,的确是一个好且强大的高级应用语言。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询