1

私がこれを言わなければならない前に:私は私の英語が下手ですみません...私は学生です.私の先生は私のコースワークのためにパスカルで私に問題を与えました.私はnの大きな値に対して2^nを計算するプログラムを書かなければなりません. ...書きましたが、問題があります...私のプログラムは、30より大きいnの値に対して0を返します...私のコードは以下です...助けてください:::事前に感謝します...

function control(a: integer): boolean;
var 
   b: boolean;
begin
   if (a >= 10) then b := true
   else b := false;

   control := b;
end;

const
   n = 200000000;

var
   a: array[1..n] of integer;
   i, j, c, t, rsayi: longint; k: string;

begin
   writeln('2^n');
   write('n=');
   read(k);

   a[1] := 1;
   rsayi := 1;
   val(k, t, c);

   for i := 1 to t do
   for j := 1 to t div 2 do
   begin
      a[j] := a[j] * 2;
   end;

   for i := 1 to t div 2 do
   begin
      if control(a[j]) = true then
      begin
         a[j + 1] := a[j + 1] + (a[j] div 10);
         a[j] := a[j] mod 10;
         rsayi := rsayi + 1;
      end;
   end;
   for j := rsayi downto 1 do write(a[j]);
end.
4

2 に答える 2

1

最初の (入れ子になった) ループは、a のすべての要素に対して 2 を掛ける "t" 回に要約されます。

2 による 30 の乗算は、32 ビット整数 (正の値の 2^31-1 であるため、2^31 には到達しません) を使用できる限りです。

したがって、最初のループは機能せず、おそらく戦略を再考する必要があります。

于 2013-05-09T10:27:17.200 に答える