COBOL 中的快乐数字

Happy Numbers in COBOL

正如标题所暗示的,我正在做一个软件来计算和验证插入的数字是否是一个快乐的数字(或不是)。在 COBOL 语言中(参考什么是快乐数字 https://mathworld.wolfram.com/HappyNumber.html)。

现在,我的代码无法正确计算数字是否快乐(在程序中 HEY = Happy and HOY = not happy :C)

我的问题是,我在代码中做错了什么?我现在需要的只是正确检测它是否快乐。欢迎任何帮助。

这是我当前的代码:

IDENTIFICATION DIVISION.
       PROGRAM-ID. YOUR-PROGRAM-NAME.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       01 num PIC 9(36).
       01 addc PIC 9(36).
       01 rem PIC 9(36).
       01 pow PIC 9(36).
       01 toast PIC 9.
       01 k PIC 999 VALUE 0.
       01 l PIC 9(36).
       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
           DISPLAY"Escribe numero "
           ACCEPT num
           PERFORM WITH TEST AFTER UNTIL addc = 1
               MOVE 0 TO addc
               PERFORM WITH TEST AFTER UNTIL num = 0
                   DIVIDE num BY 10 GIVING num REMAINDER rem
                   MULTIPLY rem BY rem GIVING pow
                   MOVE pow TO addc
               END-PERFORM

               IF addc = 1
                   MOVE 1 TO toast
               ELSE
                   MOVE addc TO num
                   ADD 1 TO k
                   IF k = 20
                       MOVE 1 TO addc
                       MOVE 0 TO toast
                   END-IF
               END-IF
           END-PERFORM

           IF toast = 1
               DISPLAY "HEY"
           ELSE
               DISPLAY "HOY"
           END-IF
            STOP RUN.
       END PROGRAM YOUR-PROGRAM-NAME.

另外,作为一个额外的问题,我如何处理超过最大限制 36 的数字?不使用 Cobol 中字符串和字符的等价物。

行:

PERFORM UNTIL num > 0

使 PERFORM 循环不进入,因为 num 很可能大于 0。你要做的是执行循环,从 num 中获取所有数字直到 num 为 0。

此外,

MOVE pow TO addc

应该是

ADD pow TO addc