51 lines
668 B
Text
51 lines
668 B
Text
BYTE FUNC SumOfSquares(BYTE x)
|
|
BYTE sum,d
|
|
|
|
sum=0
|
|
WHILE x#0
|
|
DO
|
|
d=x MOD 10
|
|
d==*d
|
|
sum==+d
|
|
x==/10
|
|
OD
|
|
RETURN (sum)
|
|
|
|
BYTE FUNC Contains(BYTE ARRAY a BYTE count,x)
|
|
BYTE i
|
|
|
|
FOR i=0 TO count-1
|
|
DO
|
|
IF a(i)=x THEN RETURN (1) FI
|
|
OD
|
|
RETURN (0)
|
|
|
|
BYTE FUNC IsHappyNumber(BYTE x)
|
|
BYTE ARRAY cache(100)
|
|
BYTE count
|
|
|
|
count=0
|
|
WHILE x#1
|
|
DO
|
|
cache(count)=x
|
|
count==+1
|
|
x=SumOfSquares(x)
|
|
IF Contains(cache,count,x) THEN
|
|
RETURN (0)
|
|
FI
|
|
OD
|
|
RETURN (1)
|
|
|
|
PROC Main()
|
|
BYTE x,count
|
|
|
|
x=1 count=0
|
|
WHILE count<8
|
|
DO
|
|
IF IsHappyNumber(x) THEN
|
|
count==+1
|
|
PrintF("%I: %I%E",count,x)
|
|
FI
|
|
x==+1
|
|
OD
|
|
RETURN
|