Fórum Dúvida de fácil solução - Somar números....... #225307

12/04/2004

0

Er, quero fazer uma procedure que, quando o usuário digitar algum número (exemplo: ´184´), o programa some cada número (1 + 8 + 4). Como faço isso? :oops:


Bfalcon

Bfalcon

Responder

Posts

12/04/2004

Allen74

Você pode realizar esta operação transformando em string e somando os dígitos ou então trabalhando com inteiro e utilizando a base 10 para calcular, que é mais rápido. Veja as duas formas:
function SomaDigitosStr (num : string) : longint;
var
  i : integer;
begin
  result := 0;
  for i := 1 to length(num) do
    if num[i] in [´0´..´9´] // somar apenas números :b
    then result := result + ord(num[i]) - ord(´0´);
end;

function SomaDigitos (num : longint) : longint;
begin
  result := 0;
  num := abs(num); // somente interessa números positivos
  while num <> 0 do
  begin
    result := result + num mod 10;
    num := num div 10;
  end;
end;

Se você precisa repetir a operação muitas vezes e deseja ter maior velocidade, a segunda função é recomendada, desde que a representação do número não exceda o limite de armazenamento do tipo longint.

A primeira função, apesar de ser mais lenta, não possui esta limitação, sendo que você pode passar como parâmetro uma string contendo números de quantos dígitos quiser. Ela somente é limitada pelo tipo do retorno (longint), ou seja, a soma dos dígitos não poderá ultrapassar o valor: 2147483647.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar