// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!
function SumD(k:integer):integer;
begin
Result:=0;
while k>0 do (Result,k):=(Result+k mod 10,k div 10)
end;
function Good(k,s:integer):boolean;
begin
var p:=1;
while k>0 do (p,k):=(p*(k mod 10),k div 10);
Result:=p=s
end;
begin
var n:=ReadInteger('n=');
var s:=SumD(n);
Range(1,n-1).Where(n->Good(n,s)).Println
end.
Пример
n= 44
8 18 24 42