Указать те числа, произведение цифр которых равно заданному числу 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д