Почему сильное число отображается один раз в коде? - PullRequest
0 голосов
/ 14 января 2019

Код не печатает все сильные числа в заданном диапазоне нижнего и верхнего предела. Это только печать 1. Не удается найти ни логическую, ни синтаксическую ошибку. Пожалуйста, помогите.

Новое в программировании на C. Практиковал С вопросы онлайн. Вопрос собирался напечатать все сильные числа.

int strong (int lower_limit,int upper_limit)
{
   int i,temp1,temp2,product=1,sum=0;

   for(i=lower_limit;i<=upper_limit;i++)
   {
      temp1=i;

      while(temp1!=0)
      {
         temp2=temp1%10;
         for( ;temp2>0;temp2--)
         {
            product=temp2*product;
         }
         temp1/=10;                
         sum=sum+product;
      }

      if(i==sum)
         printf("%d is a strong number\n",i);
   }

   return 0;
}

int main()
{
   int lower_limit,upper_limit;

   printf("Enter lower limit number\n");
   scanf("%d",&lower_limit);

   printf("Enter upper limit number\n");
   scanf("%d",&upper_limit);

   strong(lower_limit,upper_limit);

   return 0;
}

Если я поставлю lower_limit как 1 и upper_limit как 1000, я должен получить 1,2 и 145.

1 Ответ

0 голосов
/ 14 января 2019

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

Это должно работать:

int strong(int lower_limit, int upper_limit) {
    int i, temp1, temp2, product = 1, sum = 0;

    for (i = lower_limit; i <= upper_limit; i++) {
        temp1 = i;
        sum = 0; // should be reset when iterating through interval

        while (temp1 != 0) {
            temp2 = temp1 % 10;
            product = 1; // should reset for each digit
            for (; temp2 > 0; temp2--) {
                product = temp2 * product;
            }
            temp1 /= 10;
            sum = sum + product;
        }

        if (i == sum)
            printf("%d is a strong number\n", i);
    }

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