PND, Итак, думаю, что нужно пологать, что a - число минимум двузначное, так как любое однозначное число делится на сумму своих цифр (кроме 0). =) Первый вариант (тупо перебор):
1) Пробегаем по всем числам от a до b.
2) Посылаем текущий индекс в функцию посчета суммы цифр.
3) Если число, при этом делится без остатка на сумму - выводим на экран
Реализуем:
Code
Program SummAllNums;
Uses CRT;
Var a, b, i: Word;
Function GetSumm(x: Word): Word;
Var Summ: Word;
Begin
Summ := 0;
While (x > 0) do
Begin
Summ := Summ + x mod 10;
x := x div 10;
End;
GetSumm := Summ;
End;
Begin
ClrScr;
Write('Введите предел [a]: '); Readln(a);
Write('Введите предел [b]: '); Readln(b);
For i := a to b do
Begin
If (i mod GetSumm(i) = 0) then Writeln(i);
End;
ReadKey;
End.
Неоптимально кое-где, и нет проверки на вводе, чтобы не вписывали отрицательные. Так как условие подразумевает натуральные числа.. Вот. Вроде работает как надо. Проверка:
Quote
Введите предел [a]: 10
Введите предел [b]: 20
10
12
18
20
10 делится на 1
12 делится на 3
18 делится на 9
20 делится на 2
Все?