procedure jf(x:integer);
  var i,j,k,m:integer;
  begin
    m:=0;
    for j:=length(s[x-1]) downto 1 do begin
      k:=(ord(s[x-1,j])-48)*2+m;
      if k>9 then begin
        k:=k mod 10;m:=1;
      end else m:=0;
      s[x,j]:=chr(k+48);
    end;
    if m>0 then s[x]:='1'+s[x];
  end;
这是算一个高精乘法,每次乘2,S为字符串数组,为什么在S[X-1]=16时,执行S[X,J]:=CHR(K+48)这一步时,S并没有被付值,WHY?
整个程序为:
  var s:array[1..200] of string[100];
    a,b,c,n,x,i,j:integer;
    max,m:string[200];
procedure jf(x:integer);
  var i,j,k,m:integer;
  begin
    m:=0;
    for j:=length(s[x-1]) downto 1 do begin
      k:=(ord(s[x-1,j])-48)*2+m;
      if k>9 then begin
        k:=k mod 10;m:=1;
      end else m:=0;
      s[x,j]:=chr(k+48);
    end;
    if m>0 then s[x]:='1'+s[x];
  end;
begin
  readln(n,x);
  a:=x-n+1;
  s[1]:='1';
  max:=s[1];
  for i:=2 to a do begin
    jf(i);
    while length(s[i])>length(max) do max:='0'+max;
    while length(s[i])<length(max) do s[i]:='0'+s[i];
    n:=0;
    for j:=length(s[i]) downto 1 do begin
      x:=ord(s[i,j])-48+ord(max[j])-48+n;
      if x>9 then begin
        x:=x mod 10;n:=1;
      end else n:=0;
      max[j]:=chr(x+48);
    end;
    if n>0 then max:='1'+max;
  end;
  writeln(max)
end.
题目是,第一格放1个,2放2,3放4,4放8,8放16,如此如此,X为到多少格,N为从多少格起(这里我还没编好,先看看那个问题吧!)
先谢谢了 

[em9]