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
正如标题所暗示的,我正在做一个软件来计算和验证插入的数字是否是一个快乐的数字(或不是)。在 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