0

我的初学者 C 编程课有一个家庭作业:

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

● 起始整数为 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 语句之后,程序什么也不做。为什么会这样?对于成功完成这项任务有什么建议吗?非常感谢你的帮助

4

1 回答 1

1

考虑这一行:

res = num / 10;

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

res = res / 10;
于 2019-11-06T14:10:47.113 回答