Middle three digits: Difference between revisions

Content added Content deleted
No edit summary
Line 428: Line 428:


middleThreeDigits(cast(short)-32768): 276</pre>
middleThreeDigits(cast(short)-32768): 276</pre>

=={{header|Erlang}}==
<lang erlang>% Implemented by Arjun Sunel
-module(middle_three_digits).
-export([main/0]).

main() ->
digits(123),
digits(12345),
digits(1234567),
digits(987654321),
digits(10001),
digits(-10001),
digits(-123),
digits(-100),
digits(100),
digits(-12345),
digits(1),
digits(2),
digits(-1),
digits(-10),
digits(2002),
digits(-2002),
digits(0).

digits(N) ->

if N < 0 ->
digits(-N);

(N div 100) =:= 0 ->
io:format("too small\n");
true ->
K=length(integer_to_list(N)),
if (K rem 2) =:= 0 ->
io:format("even number of digits\n");
true ->
loop((K-3) div 2 , N)
end
end.

loop(0,N) ->
if
N rem 1000 =:= 0 ->
io:format("000\n");
N rem 1000 < 10 ->
io:format("00~w~n",[N rem 1000]);
N rem 1000 < 100 ->
io:format("0~w~n",[N rem 1000]);
true ->
io:format("~w~n", [N rem 1000])
end;
loop(X,N) when X>0 ->
loop(X-1, N div 10).
</lang>
{{out}}
<pre>123
234
345
654
000
000
123
100
100
234
too small
too small
too small
too small
even number of digits
even number of digits
too small
ok
</pre>


=={{header|Haskell}}==
=={{header|Haskell}}==