How to sum the digits of the number 2^N in Pascal

1 Answer

0 votes
program PowerOfTwoDigitSum;

type
  TDigitArray = array of Integer;

function PowerOfTwo(N: Integer): TDigitArray;
// Calculate 2^N for large numbers
var
  digits: TDigitArray;
  i, j, carry, temp: Integer;
begin
  SetLength(digits, 1);
  digits[0] := 1;

  for i := 1 to N do
  begin
    carry := 0;
    for j := 0 to High(digits) do
    begin
      temp := digits[j] * 2 + carry;
      digits[j] := temp mod 10;
      carry := temp div 10;
    end;

    while carry > 0 do
    begin
      SetLength(digits, Length(digits) + 1);
      digits[High(digits)] := carry mod 10;
      carry := carry div 10;
    end;
  end;

  PowerOfTwo := digits;
end;

function SumOfDigits(N: Integer): Integer;
var
  digits: TDigitArray;
  i, sum: Integer;
begin
  digits := PowerOfTwo(N);
  sum := 0;
  for i := 0 to High(digits) do
    sum := sum + digits[i];
  SumOfDigits := sum;
end;

var
  N: Integer;
begin
  N := 15;
  WriteLn('Sum of digits of 2^', N, ' is: ', SumOfDigits(N));

  N := 100;
  WriteLn('Sum of digits of 2^', N, ' is: ', SumOfDigits(N));

  N := 1000;
  WriteLn('Sum of digits of 2^', N, ' is: ', SumOfDigits(N));
end.




(*
run:
  
Sum of digits of 2^15 is: 26
Sum of digits of 2^100 is: 115
Sum of digits of 2^1000 is: 1366

*)


 



answered Aug 1, 2025 by avibootz
edited Aug 2, 2025 by avibootz
...