回 帖 发 新 帖 刷新版面

主题:递归与数制转换问题

用递归将一个十进制数转换成2进制数,或将一个2进制数转换成十进制数.

回复列表 (共7个回复)

沙发

用递归怎么能转换进制呢?
还不如不用递归简便。

(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.

板凳

(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 楼

我用短除法做的。。。

(一) 十进制转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 楼

闷,你们的程序都无递归啊!!~~~~~~~~~
游侠UFO的更酷:只是过程而已,倒不如不用方便!

5 楼

procedure digit(x:longint);
begin
  if x<1 then exit;
  digit(x div 2);
  write(x mod 2);
end;

6 楼

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 楼

这都是基本的数论问题,可以说是一个OIer的基本功

我来回复

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