我写了这段代码来打印从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);
}
}