Для начала вы должны объявить переменные в минимальной области видимости, где они используются. В противном случае трудно прочитать код.
В этом выражении
for(n=1;i<=limit;n++)
^^^^^^^^
есть опечатка. Переменная i
не инициализирована. Вы должны написать
for ( n=1; n <= limit; n++ )
Однако в следующем цикле изменяется переменная n
.
while(n>0)
{
//...
n=n/10;
}
Вам необходимо использовать другую переменную в этом цикле. Например, перед циклом вы можете написать
int value = n;
while ( value > 0 )
{
//...
}
Этот цикл
for(i=r;i>=1;i--)
может иметь на одну итерацию меньше
for(i=r;i > 1;i--)
Также лучше использовать типunsigned int
вместо типа int
. В противном случае пользователь может ввести отрицательное число.
Вот демонстрационная программа.
#include <stdio.h>
int main(void)
{
printf( "Enter the limit to find strong numbers: " );
unsigned int n = 0;
scanf( "%u", &n );
for ( unsigned int i = 0; i < n; i++ )
{
unsigned int value = i + 1;
unsigned int sum = 0;
do
{
unsigned int f = 1;
for ( unsigned int digit = value % 10; digit > 1; digit-- )
{
f *= digit;
}
sum += f;
} while ( value /= 10 );
if ( i + 1 == sum )
{
printf( "%u is a strong number.\n", i + 1 );
}
}
return 0;
}
Его вывод может выглядеть как
Enter the limit to find strong numbers: 145
1 is a strong number.
2 is a strong number.
145 is a strong number.