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
*)