主题:递归与数制转换问题
编程小菜菜
[专家分:90] 发布于 2007-08-28 21:04:00
用递归将一个十进制数转换成2进制数,或将一个2进制数转换成十进制数.
回复列表 (共7个回复)
沙发
Matodied [专家分:7560] 发布于 2007-08-28 21:49:00
用递归怎么能转换进制呢?
还不如不用递归简便。
(1)10进制转2进制:
VAR
n, d: INTEGER; z, zz: STRING;
BEGIN
READLN(n);
REPEAT
d := n MOD 10; STR(d, zz); z := zz + z;
n := n DIV 10;
UNTIL n = 0;
WRITELN(z);
END.
板凳
Matodied [专家分:7560] 发布于 2007-08-28 22:00:00
(2)2进制转10进制:
VAR
n: STRING; s, t, i, j, m, r, l, k: INTEGER;
BEGIN
READLN(n);
l := LENGTH(n);
FOR i:=l DOWNTO 1 DO BEGIN
VAL(COPY(n, i, 1), t, k);
r := l - i;
m := 1;
FOR j:=1 TO r DO m := m * 2;
s := s + t * m;
END;
WRITELN(s);
END.
3 楼
游侠UFO [专家分:1200] 发布于 2007-08-31 11:34:00
我用短除法做的。。。
(一) 十进制转N进制
[算法描述]
辗转相除法.
[源程序]
function int_to_n(x:cardinal; n:byte):string;
var
a:array[1..255] of byte;
ans:string;
count,i:byte;
begin
ans:='';
count:=0;
if x=0 then ans:='0';
while x>0 do
begin
count:=count+1;
a[count]:=x mod n;
x:=x div n;
end;
for i:=count downto 1 do
if a[i]<10 then ans:=ans+chr(ord('0')+a[i])
else ans:=ans+chr(ord('a')-10+a[i]);
int_to_n:=ans;
end;
(二) N进制转十进制
[算法描述]
加权.
[源程序]
function n_to_int(x:string; n:byte):cardinal;
var
a:array[1..255] of byte;
ans,y:cardinal;
count,i,j:byte;
begin
ans:=0;
for i:=1 to length(x) do
if x[i] in ['0'..'9'] then a[i]:=ord(x[i])-ord('0')
else a[i]:=ord(x[i])-ord('a')+10;
count:=0;
for i:=length(x) downto 1 do
begin
y:=1;
for j:=1 to count do y:=y*n;
count:=count+1;
ans:=ans+y*a[i];
end;
n_to_int:=ans;
end;
文章引用自:
http://blog.sina.com.cn/ufownl
晕,现在粘贴个东西还出来个“文章引用自:”。。。
4 楼
abcwuhang [专家分:1840] 发布于 2007-08-31 12:08:00
闷,你们的程序都无递归啊!!~~~~~~~~~
游侠UFO的更酷:只是过程而已,倒不如不用方便!
5 楼
abcwuhang [专家分:1840] 发布于 2007-10-21 19:33:00
procedure digit(x:longint);
begin
if x<1 then exit;
digit(x div 2);
write(x mod 2);
end;
6 楼
abcwuhang [专家分:1840] 发布于 2007-10-21 19:41:00
function digit(x:string;how:longint):longint;
var y,code:longint;
begin
if how<1 then exit(0);
if how=1 then
begin
val(x,digit,code);
exit;
end;
val(copy(x,1,1),y,code);
digit:=x*y+digit(copy(x,2,length(x)));
end;
{未经验证............
递归时需输入:digit({需转换的2进制数,string型},最高2次幂数);
如:writeln(digit('10101',16));
writeln(digit('100111',32));等}
7 楼
angwuy [专家分:2280] 发布于 2007-10-21 20:25:00
这都是基本的数论问题,可以说是一个OIer的基本功
我来回复