blob: b6355e84e3ed0d9ee2e853780bdb57dde63287f2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
MODULE CH2;
(*
Compile with:
$ obc -o CH2 CH2.m
Compiler:
https://spivey.oriel.ox.ac.uk/corner/Oxford_Oberon-2_compiler
*)
IMPORT Out;
PROCEDURE Factorial(N:INTEGER):INTEGER;
BEGIN
IF(N = 0) THEN RETURN 1
ELSE RETURN N * Factorial(N-1) END;
END Factorial;
PROCEDURE Factorions(N:INTEGER):INTEGER;
VAR
Copy,Sum:INTEGER;
BEGIN
Copy := N;
Sum := 0;
REPEAT
Sum := Sum + Factorial(Copy MOD 10);
Copy := Copy DIV 10;
UNTIL(Copy = 0);
IF Sum = N THEN RETURN 1 ELSE RETURN 0 END;
END Factorions;
BEGIN
Out.String("145: "); Out.Int(Factorions(145), 1); Out.Ln;
Out.String("123: "); Out.Int(Factorions(123), 1); Out.Ln;
END CH2.
|