Mi aplicación demora mucho
Buenas, "Dado un valor M hallar todos los naturales tales cuya suma de dígitos sea M", esa es mi pregunta, lo he desarrollado con Free Pascal, es obligatorio usar como variable el máximo que puede almacenar el pascal para los naturales(Longint, en free pascal es Longword), ya lo hice pero se tarda en buscar todos lo números he imprimirlo, creo que es normal, pero a ver si alguien puede mejorarlo; ahí va mi código:
uses crt;
const
maximo=2147483647; {Maximo valor de la variable longword}
var
m,inicio,cifra,numero,suma,factor,auxiliar:longword;
begin
clrscr;
writeln('Los numeros cuya suma de d¡gitos es: ');
readln(m);
--------------------------------------
{busco el valor mas cercano o igual al primer numero cuya suma es m}
for cifra:=1 to (m div 9) do
inicio:=inicio*10+1;
inicio:=9*inicio;
--------------------------------------
{comienzo a analizar cada numero a ver si se cumple lo preguntado}
for numero:=inicio to maximo do
begin
auxiliar:=numero;
suma:=0;
factor:=10;
{Aquí se sacara cifra por cifra el numero de turno y se sumaran para verificar luego si cumple}
while (suma<=m) and (not (auxiliar=0)) do
begin
suma:=suma+ (auxiliar mod factor);
auxiliar:=auxiliar div factor;
end;
if suma=m then writeln(numero);
end;
end.
uses crt;
const
maximo=2147483647; {Maximo valor de la variable longword}
var
m,inicio,cifra,numero,suma,factor,auxiliar:longword;
begin
clrscr;
writeln('Los numeros cuya suma de d¡gitos es: ');
readln(m);
--------------------------------------
{busco el valor mas cercano o igual al primer numero cuya suma es m}
for cifra:=1 to (m div 9) do
inicio:=inicio*10+1;
inicio:=9*inicio;
--------------------------------------
{comienzo a analizar cada numero a ver si se cumple lo preguntado}
for numero:=inicio to maximo do
begin
auxiliar:=numero;
suma:=0;
factor:=10;
{Aquí se sacara cifra por cifra el numero de turno y se sumaran para verificar luego si cumple}
while (suma<=m) and (not (auxiliar=0)) do
begin
suma:=suma+ (auxiliar mod factor);
auxiliar:=auxiliar div factor;
end;
if suma=m then writeln(numero);
end;
end.
1 Respuesta
Respuesta
1