печать строгого числа (c Программирование) - PullRequest
0 голосов
/ 04 октября 2019

Программа Basci Моя логика не работает должным образом, чтобы "найти сильное число" заданного диапазона. Ничто не печатает даже после указания диапазона номера.

#include<stdio.h>
int main()
{
    int n,r,sum,fact,limit,i;
     printf("Enter the limit to find strong numbers");
    scanf("%d",&limit);
    for(n=1;i<=limit;n++)
    {
        sum=0;
        while(n>0)
        {
            r=n%10;
            fact=1;
            for(i=r;i>=1;i--)
            {
                fact = fact*i;
            }
            sum = sum+fact;
            n=n/10;
         }
         if(n == sum)
         printf("%d is a strong number\n", n);
    }

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Для начала вы должны объявить переменные в минимальной области видимости, где они используются. В противном случае трудно прочитать код.

В этом выражении

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.
0 голосов
/ 04 октября 2019

Существует несколько проблем:

  1. В конце программы отсутствует оператор return 0 для функции main (хотя это не требуется дляСтандарты C99 и выше, как сказано в комментариях)
  2. Вам не хватает конечной скобки функции main
  3. Как сказано в комментариях, неверно условие цикла for for(n=1;i<=limit;n++)он должен сравнивать n вместо i, например for(n=1;n<=limit;n++)
  4. Здесь вы перезаписываете счетчик чисел n n=n/10;. Вместо этого вам следует использовать другую переменную, чтобы разбить число на такие цифры перед циклом while int num = n;
  5. Наконец, было бы полезно напечатать, если число не является сильным числом с предложением elseв последнем if утверждении, таком как else printf("%d is not a strong number", n);

Вот правильная программа:

#include <stdio.h>                                         
int main()                                                 
{                                                          
    int n, r, sum, fact, limit, i;                         

    printf("Enter the limit to find strong numbers");      

    scanf("%d", &limit);                                   

    for (n = 1; n <= limit; n++) // Point 3
    {                                                      
        sum = 0;                                           

        int num = n; // Point 4

        while (num > 0)                                    
        {                                                  
            r = num % 10;                                  

            fact = 1;                                      

            for (i = r; i >= 1; i--)                       

            {                                              
                fact = fact * i;                           
            }                                              

            sum = sum + fact;                              

            num = num / 10;                                
        }                                                  

        if (n == sum) printf("%d is a strong number\n", n);
        else printf("%d is not a strong number\n", n); // Point 5
    }                                                      

    return 0; // Point 1
} // Point 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...