38 lines
890 B
Plaintext
38 lines
890 B
Plaintext
program Midl3dig;
|
|
{$IFDEF FPC}
|
|
{$MODE Delphi} //result /integer => Int32 aka longInt etc..
|
|
{$ELSE}
|
|
{$APPTYPE console} // Delphi
|
|
{$ENDIF}
|
|
uses
|
|
sysutils; //IntToStr
|
|
function GetMid3dig(i:NativeInt):Ansistring;
|
|
var
|
|
n,l: NativeInt;
|
|
Begin
|
|
setlength(result,0);
|
|
//n = |i| jumpless abs
|
|
n := i-((ORD(i>0)-1)AND (2*i));
|
|
//calculate digitcount
|
|
IF n > 0 then
|
|
l := trunc(ln(n)/ln(10))+1
|
|
else
|
|
l := 1;
|
|
if l<3 then Begin write('got too few digits'); EXIT; end;
|
|
If Not(ODD(l)) then Begin write('got even number of digits'); EXIT; end;
|
|
result:= copy(IntToStr(n),l DIV 2,3);
|
|
end;
|
|
const
|
|
Test : array [0..16] of NativeInt =
|
|
( 123,12345,1234567,987654321,10001,-10001,
|
|
-123,-100,100,-12345,1,2,-1,-10,2002,-2002,0);
|
|
var
|
|
i,n : NativeInt;
|
|
Begin
|
|
For i := low(Test) to High(Test) do
|
|
Begin
|
|
n := Test[i];
|
|
writeln(n:9,': ',GetMid3dig(Test[i]));
|
|
end;
|
|
end.
|