How to find the first power of 2 whose leading digits are 12 in Pascal

1 Answer

0 votes
program LeadingDigits;

{$mode objfpc}

uses
  SysUtils, Math;

// return 1 if 2^n starts with prefix, else 0 
function startsWithPrefix(n: Int64; prefix: Integer): Boolean;
var
  log2v : Double;
  x, frac : Double;
  buf : String;
  digits : Integer;
  leading : Integer;
begin
  log2v := Log10(2.0);

  x := n * log2v;
  frac := x - Floor(x);

  { count digits in prefix }
  buf := IntToStr(prefix);
  digits := Length(buf);

  { compute leading digits }
  leading := Trunc(Power(10, frac + digits - 1));

  Result := (leading = prefix);
end;

var
  prefix : Integer;
  n : Int64;

begin
  prefix := 12;

  for n := 1 to High(Int64) do
  begin
    if startsWithPrefix(n, prefix) then
    begin
      WriteLn('First n = ', n);
      WriteLn('2 ^ ', n, ' = ', Trunc(Power(2, n)));  
      Break;
    end;
  end;
end.



(*
run:

First n = 7
2 ^ 7 = 128

*)

 



answered 1 hour ago by avibootz
edited 52 minutes ago by avibootz

Related questions

...