45 lines
1.3 KiB
Text
45 lines
1.3 KiB
Text
int List(810); \list of numbers in a cycle
|
|
int Inx; \index for List
|
|
include c:\cxpl\codes;
|
|
|
|
|
|
func HadNum(N); \Return 'true' if number N is in the List
|
|
int N;
|
|
int I;
|
|
[for I:= 0 to Inx-1 do
|
|
if N = List(I) then return true;
|
|
return false;
|
|
]; \HadNum
|
|
|
|
|
|
func SqDigits(N); \Return the sum of the squares of the digits of N
|
|
int N;
|
|
int S, D;
|
|
[S:= 0;
|
|
while N do
|
|
[N:= N/10;
|
|
D:= rem(0);
|
|
S:= S + D*D;
|
|
];
|
|
return S;
|
|
]; \SqDigits
|
|
|
|
|
|
int N0, N, C;
|
|
[N0:= 0; \starting number
|
|
C:= 0; \initialize happy (starting) number counter
|
|
repeat N:= N0;
|
|
Inx:= 0; \reset List index
|
|
loop [N:= SqDigits(N);
|
|
if N = 1 then \happy number
|
|
[IntOut(0, N0); CrLf(0);
|
|
C:= C+1;
|
|
quit;
|
|
];
|
|
if HadNum(N) then quit; \if unhappy number then quit
|
|
List(Inx):= N; \if neither, add it to the List
|
|
Inx:= Inx+1; \ and continue the cycle
|
|
];
|
|
N0:= N0+1; \next starting number
|
|
until C=8; \done when 8 happy numbers have been found
|
|
]
|