Указать те числа, произведение цифр которых равно заданному числу k - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Среди всех n-значных чисел указать те, произведение цифр которых равна данному числу к (пользователь вводит n и k).
Листинг программы
  1. int main()
  2. {
  3. setlocale(LC_ALL, "Rus");
  4. int k, n, a, d, t,i,v;
  5. printf("Введите k\n");
  6. scanf("%d", &k);
  7.  
  8. printf("Введите n\n");
  9. scanf("%d", &n);
  10. for(n=pow(10,n-1); n<pow(10,n)-1; n++)
  11. {
  12. /* Не могу понять как организовать эту часть. Помогите пожалуйста: */
  13. v = pow(100, n);
  14. a =n/v;
  15. t = n%v;
  16. d =(t/10)*(t%10);
  17. a = a*d;
  18. /* ***** */
  19. if(a==k)
  20. {
  21. printf("\nПроизведение цифр n:%d", n);
  22. printf(" равна числу k = %d", k);
  23. }
  24. }
  25. getch( );
  26. return 0;
  27. }

Решение задачи: «Указать те числа, произведение цифр которых равно заданному числу k»

textual
Листинг программы
  1. //gcc 5.4.0
  2.  
  3. #include  <stdio.h>
  4.  
  5.  
  6. int main(void)
  7. {
  8.     int k=4;
  9.     int n=2;
  10.    
  11.     int beg, end;
  12.     int i, j, res;
  13.     for (i=1, beg=1; i<n; i++)
  14.         beg *= 10;
  15.     end = beg*10;
  16.  
  17.     for (i=beg; i<end; i++) {
  18.         for (j=i, res=1; j; j/=10) {
  19.             res *= j%10;
  20.         }
  21.         if (res==k)
  22.             printf("%d\n", i);
  23.     }
  24.     return 0;
  25. }

Объяснение кода листинга программы

В этом коде используется два цикла for для решения задачи.

  1. Первый цикл for (i=1, beg=1; i<n; i++) { beg *= 10; } Выполняется перебор чисел от 1 до n-1. Переменная beg инициализируется как 1, затем умножается на 10 для каждого следующего числа. Таким образом, на каждой итерации beg будет равен 10, 100, 1000 и так далее. Переменная end не вычисляется в этом цикле, она будет равна 10 в степени n.
  2. Второй цикл for (i=beg; i<end; i++) { Этот цикл начинается с значения beg и продолжается до значения end (которое на каждой итерации увеличивается на 10). Внутри цикла находится еще один цикл for.
  3. Второй вложенный цикл for (j=i, res=1; j; j/=10) { Начальное значение j равно i. Это значение используется для вычисления произведения цифр числа i. Переменная res инициализируется как 1. Затем в каждой итерации значение j делится на 10, и результат умножается на последнюю цифру (j%10). Таким образом, на каждой итерации получается произведение цифр числа i.
  4. Если произведение цифр числа i равно k, то выполняется printf(%d\n, i); Это условие проверяет, равно ли произведение цифр числа i заданному числу k. Если это так, то число i выводится на экран. Таким образом, этот код выводит все числа в диапазоне от 1 до 10^n-1, у которых произведение цифр равно k.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы