我写了这段代码来打印从1到n的所有强数,但是根本没有得到输出。运行程序后,终端卡住了,我不知道哪里出错了。请纠正我。

145是一个强数,因为1! + 4! + 5! == 145

#include <stdio.h>

void main() {
    int i = 1, fact, sum, n, a;
    long int number;

    printf("\n Find Strong numbers between 1 to \n");
    scanf("\n%ld", &number);

    printf("\n All Strong numbers between 1 to %ld are:\n", number);

    for (int j = 1; j <= number; j++) {
        sum = 0;

        while (j != 0) {
            a = j % 10;
            j = j / 10;
            fact = 1;

            while (i <= a) {
                fact = fact * a;
                a--;
            }
            sum = sum + fact;
        }
        if (j == sum)
            printf("\n%d\n", j);
    }
}

最佳答案

由于在另一个循环中使用了循环变量,因此代码陷入了无限循环。 for循环的变量j在每次迭代中增加1。但是在同一次迭代中,您也将j除以10直至为0。这就是为什么在for循环的每次迭代开始时j始终为1的原因。

解决方案是简单地为while循环使用一个额外的变量,并将其初始化为该迭代的j值。请参阅下面的代码来解决此问题。

void main()
{
    int i=1,fact,sum, n, a, tmp;
    long int number;

    printf("\n Find Strong numbers between 1 to \n");
    scanf("\n%ld",&number);

    printf("\n All Strong numbers between 1 to %ld are:\n",number);

    for(int j=1;j<=number;j++)
    {
        tmp = j;
        sum=0;

        while(tmp!=0)
        {
            a=j%10;
            tmp=tmp/10;
            fact=1;

            while(i<=a)
            {
                fact=fact*a;
                a--;
            }
            sum=sum+fact;
        }
        if(j==sum)
            printf("\n%d\n",j);

    }
}

10-08 19:14