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