Ver Mensaje Individual
  #8  
Antiguo 10-02-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola,

Se me ocurre esta función:

Código Delphi [-]
function Incrementa(Numero: Cardinal): Integer;
begin
  if Numero < 10 then
    Result := (Numero + 1) mod 10
  else
    Result := 10*Incrementa(Numero div 10) + Incrementa(Numero mod 10);
end;

Desafortunadamente, si el número no empieza en 1, en alguno de los incrementos el primer dígito será cero, y, al no contar los ceros iniciales, el siguiente paso fallará.

Podríamos usar una cadena para representar al número y usar algo como esto:

Código Delphi [-]
function Incrementa2(Numero: String): String;
var
  I: Integer;

begin
  Result := Numero;

  for I := 1 to Length(Numero) do
    Result[i] := Char(((Ord(Result[i]) - Ord('0') + 1) mod 10) + Ord('0'))
end;

// Saludos
Responder Con Cita