Найти все числа от 0 до 200, которые нацело делятся на сумму своих цифр - C (СИ)
Формулировка задачи:
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
int main()
{
int p[200], i, *p_1, a, b, c, r, q;
for(i=0;i<200;i++)
*p_1=p[i];
a=i/100;
b=(i-a)/10;
c=i-a-b;
r=a+b+c;
q=*p_1/r;
if(q==0){
printf("%d", q);
getchar();
return 0;
}}Решение задачи: «Найти все числа от 0 до 200, которые нацело делятся на сумму своих цифр»
#include <stdio.h>
#include <stdlib.h>
int main()
{
int p, i, s;
for(i=1;i<=200;i++) {
p=i;
for(s=0; p; p/=10) s += p%10;
if (i%s==0) printf("%d\n", i);
}
getchar();
return 0;
}
Объяснение кода листинга программы
В этом коде используется два вложенных цикла. Цикл for(i=1;i<=200;i++) итерирует по всем числам от 1 до 200. Внутри этого цикла есть второй цикл for(s=0; p; p/=10), который вычисляет сумму цифр текущего числа. Переменная s инициализируется нулем. Затем в каждой итерации цикла значение переменной p делится на 10 и результат прибавляется к переменной s. Таким образом, в переменной s накапливается сумма цифр текущего числа. Если число нацело делится на сумму своих цифр (т.е. i%s==0), то оно выводится на экран с помощью функции printf. Код выполняется до тех пор, пока не будут выполнены два условия: 1) i не станет равным 201; 2) не будет достигнуто условие остановки внутреннего цикла, когда p станет равным нулю. Это произойдет, когда число будет иметь одну цифру.