加法持久化和加法根程序输入数字无响应

Additive Persistence and Additive Root Program Not Responding After Inputting Number

我有一个 C 语言初学者的家庭作业 class:

加法持久性是整数数字总和的属性。找到数字的和,然后对和进行数字求和,重复直到达到单个整数数字。此类循环的数量是该整数的附加持久性。考虑 以下示例:

● 起始整数为1234

● 其数字之和为1+2+3+4 = 10

● 整数现在是10

● 其各位数字之和为1 + 0 = 1

● 整数为1,当数值达到个位数时,我们就完成了。这个最后的整数是加法根

循环次数是加法持久化。整数 1234 的附加持久性为 2(第一个和为 10,然后第二个和为 1)。到达的最后一位称为整数的加法数字根。 1234 的加法数字根是 1。 编写一个程序:

● 要求用户输入一个正整数。

● 如果给定的整数是个位数,则将其加法持久性和乘法持久性报告为0,将其加法根报告为自身。

● 如果整数小于0,则表示退出程序。

● 否则,求给定整数的加法持久性和加法根,并将结果报告给用户

● 提示用户继续,直到他们退出

这是我想出的代码:



#include <stdio.h>

int main()
{
    int num;
    int pers = 0;
    int res = 0;
    int sig = 0;
    int sum = 0;
    int sum1 = 0;

    for (sig = 0;sig >= 0;) {
        printf("Please enter a positive integer to find the additive persistence, and the integer's additive digital root: ");
        scanf_s("%d", &num);
        if (num < 0) {
            sig--;
            break;
        }
        res = num;
        sum = 0;
        while((res>0)){

            sum = sum + (res % 10);
            res = num / 10;
            if (res == 0) {
                if (sum >= 10) {
                    res = sum;
                    sum = 0;

                }
                if (sum < 10)
                    pers++;


            }

        }


        printf("\nThe additive persistence is %d and the additive root is %d\n", pers, sum);




    }
    return 0;
}

每当我(成功)编译和 运行 代码时,在 scanf 语句之后程序什么都不做。为什么会这样?对于成功完成这项任务有什么建议吗? 非常感谢您的帮助

考虑这一行:

res = num / 10;

在第一个 运行 循环之后 res 的值是多少?在第二个 运行 之后?如果你在那里放一个 print 来调试你的程序,你会看到 res 总是有相同的值并且不会改变。这是一个无限循环,可能会一直持续到 sum 溢出时出现未定义的行为。你可能想要这个:

res = res / 10;