Указать те числа, произведение цифр которых равно заданному числу 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.