49 lines
1 KiB
Text
49 lines
1 KiB
Text
MODULE SumOFDigits;
|
|
FROM STextIO IMPORT
|
|
WriteString, WriteLn;
|
|
FROM SWholeIO IMPORT
|
|
WriteInt;
|
|
FROM Conversions IMPORT
|
|
StrBaseToLong;
|
|
|
|
PROCEDURE SumOfDigitBase(N: LONGCARD; Base: CARDINAL): CARDINAL;
|
|
VAR
|
|
Tmp, LBase: LONGCARD;
|
|
Digit, Sum : CARDINAL;
|
|
BEGIN
|
|
Digit := 0;
|
|
Sum := 0;
|
|
LBase := Base;
|
|
WHILE N > 0 DO
|
|
Tmp := N / LBase;
|
|
Digit := N - LBase * Tmp;
|
|
N := Tmp;
|
|
INC(Sum, Digit);
|
|
END;
|
|
RETURN Sum;
|
|
END SumOfDigitBase;
|
|
|
|
VAR
|
|
Num: LONGCARD;
|
|
|
|
BEGIN
|
|
WriteString(' 1 sums to ');
|
|
WriteInt(SumOfDigitBase(1, 10), 1);
|
|
WriteLn;
|
|
WriteString('1234 sums to ');
|
|
WriteInt(SumOfDigitBase(1234, 10), 1);
|
|
WriteLn;
|
|
IF StrBaseToLong('FE', 16, Num) THEN
|
|
WriteString(' $FE sums to ');
|
|
WriteInt(SumOfDigitBase(Num, 16), 1);
|
|
WriteLn;
|
|
END;
|
|
IF StrBaseToLong('F0E', 16, Num) THEN
|
|
WriteString('$F0E sums to ');
|
|
WriteInt(SumOfDigitBase(Num, 16), 1);
|
|
WriteLn;
|
|
END;
|
|
WriteString('MAX(LONGCARD) (in dec) sums to ');
|
|
WriteInt(SumOfDigitBase(MAX(LONGCARD), 10), 1);
|
|
WriteLn;
|
|
END SumOFDigits.
|