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

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

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

Среди всех n-значных чисел указать те, произведение цифр которых равна данному числу к (пользователь вводит n и k).
int main()
{
    setlocale(LC_ALL, "Rus");
    int k, n, a, d, t,i,v;
 
    printf("Введите k\n");
    scanf("%d", &k);

    printf("Введите n\n");
    scanf("%d", &n);
    for(n=pow(10,n-1); n<pow(10,n)-1; n++)
    {
 
/* Не могу понять как организовать эту часть. Помогите пожалуйста: */
        v = pow(100, n);
 
        a =n/v;
        t = n%v;
        d =(t/10)*(t%10);
        a = a*d;
/* ***** */
        if(a==k)
        {
            printf("\nПроизведение цифр n:%d", n);
            printf(" равна числу k = %d", k);
        }
 
    }
    getch( );
    return 0;
}

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

textual
Листинг программы
//gcc 5.4.0
 
#include  <stdio.h>
 
 
int main(void)
{
    int k=4;
    int n=2;
    
    int beg, end;
    int i, j, res;
    for (i=1, beg=1; i<n; i++)
        beg *= 10;
    end = beg*10;
 
    for (i=beg; i<end; i++) {
        for (j=i, res=1; j; j/=10) {
            res *= j%10;
        }
        if (res==k) 
            printf("%d\n", i);
    }
    return 0;
}

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

В этом коде используется два цикла 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
Похожие ответы