TransWikia.com

Calcular soma de dígitos de um número

Stack Overflow em Português Asked on December 2, 2021

Escreva um programa que receba um número inteiro na entrada, calcule e imprima a soma dos dígitos deste número na saída. Exemplo:

>>> Digite um número inteiro: 123
6

Dica: Para separar os dígitos, lembre-se: o operador // faz uma divisão inteira jogando fora o resto, ou seja, aquilo que é menor que o divisor; O operador % devolve apenas o resto da divisão inteira jogando fora o resultado, ou seja, tudo que é maior ou igual ao divisor.

Tentei de várias maneiras, mas o resultado continua dando zero. Só tenho essa tentativa anotada porque eu fui fazendo por cima:

n = int(input("Digite um número inteiro: "))

soma = 0

while (n > 0):

    resto = n % 10
    n = (n - resto)/10
    soma = soma + resto


print("A soma dos números é: ", n)

11 Answers

Ola, fiz assim: espero que ajude ;)

numero = int(input('Digite um número inteiro: '))
    
    if numero > 0:
            soma = 0
            while numero != 0:
                resto = numero % 10
                numero = (numero - resto) // 10
                soma = soma + resto
            print(soma)
    else: 
     print(numero)

Answered by Raquel Pantojo de Souza on December 2, 2021

Uma alternativa é utilizar a função reduce() do módulo functools

from functools import reduce

n = input("Digite um número inteiro: ")
print(reduce(lambda *args: sum(args), map(int, n), 0))
  • reduce() aplica uma função de dois argumentos cumulativamente aos itens dum iterável de modo a reduzir o iterável a um único valor.
  • lambda *args: sum(args) é uma função anônima que retorna a soma de seus argumentos.
  • map(int, n) aplica a função de conversão para inteiro a cada digito da string.

Veja o exemplo no IdeOne.com

Answered by Augusto Vasques on December 2, 2021

Apenas para dar mais uma opção, e mencionar um caso que foi apenas citado - mas não resolvido - em outras respostas (quando o número é negativo):

# ajuste para o caso de n ser negativo
n = abs(n)

soma = 0
while n > 0:
    n, d = divmod(n, 10)
    soma += d

Eu uso divmod, que já retorna o resultado da divisão e o resto da mesma em uma tupla - a documentação diz que para números inteiros o resultado de divmod(a, b) é o mesmo que (a // b, a % b), então é equivalente a fazer estas operações separadamente.


Outra opção - meio over engineered para este caso - é criar um gerador que retorna os dígitos do número, assim posso usá-lo com sum:

def digitos(n):
    n = abs(n)
    while n > 0:
        n, d = divmod(n, 10)
        yield d

n = int(input('Digite um número: '))
soma = sum(digitos(n))

Answered by hkotsubo on December 2, 2021

def sum_alg(numero): # Função para somar os algarismos de um número
    a = 0
    for n in range(len(str(numero))):
        n = numero // 10 ** n % 10
        a = a + n
        n = n / 10
    print a

Answered by user198517 on December 2, 2021

Fiz esse código bem simples. Estou iniciando então acho que pode ajudar as pessoas que também estão com esse problema e estão iniciando em python. Tranformei partes da string em inteiro.

x = input('Digite um número positivo maior que 0n')
if int(x) > 0:
    i = 0
    s = 0
    while i < len(x):
        s = s + int(x[i])
        i = i + 1
    print(f'A soma dos números é: {s}')
else:
    print('Digite Valores Válidos')

Answered by Marcos Andre on December 2, 2021

n = int (input (“Digite um numero inteiro:”))
soma = 0
      while (n = 0):
               resto =numero % 10
               n = (n - resto) / / 10
              soma = soma + resto
printf (“A soma dos numeros e”, soma“)
else:

printf (“numero valido:”)
else:

print (“numero invalido:”)

Answered by rafaaeula on December 2, 2021

Estou atrasado em uns dois anos, mas na minha solução, como o enunciado pedia acerca de números maiores que zero, fiz a implementação de um if casual que dá acesso a todo o while em questão, caso contrário, ele só exibe uma mensagem dizendo que o número é inválido.

 numero = int(input('numero: '))
    if numero > 0:
        soma = 0
        while numero != 0:
            resto = numero % 10
            numero = (numero - resto) // 10
            soma = soma + resto
        print(f'soma: {soma}')
    else:
        print('numero invalido...')

Answered by Thomascript on December 2, 2021

Também estava com dúvida nesse programa, e baseado no seu consegui fazendo os ajustes abaixo.

n = int(input("Digite um número inteiro: "))

soma = 0

while (n > 0):

    resto = n % 10
    n = n // 10
    soma = soma + resto


print("A soma dos números é: ", soma)

Answered by Israel on December 2, 2021

Minha solução parecida com a sua:

x = int(input("Numero: "))

soma = 0

while (x != 0):
    resto = x % 10
    x = (x - resto)//10
    soma = soma + resto
print(soma)

Answered by Igor on December 2, 2021

Para que seu algoritmo funcione, é preciso pegar o ultimo dígito do número, e armazenar este valor em algum lugar, em seguida, remova este número do dígito original, e faça isso enquanto tiver dígitos no número.

def somar_digitos(n):
    s = 0
    while n:
        s += n % 10 # Soma `s` ao ultimo numeral de `n`
        n //= 10 # Remove o ultimo numero de `n`
    return s

O que este algoritmo faz é simples:
1 - Pega o último digito de n;
2 - Soma este digito na variável s;
3 - Remove o último dígito do número n;
4 - Volta ao passo 1;

Answered by Andrey França on December 2, 2021

Caso queira explorar soluções alternativas, proponho uma que foge da dica do enunciado.

n = input("Digite um número inteiro: ")

print(sum(int(i) for i in n))

A função nativa sum calcula a soma dos itens de um objeto iterável. Por padrão, a função input retorna uma string, que é iterável no Python. Como queremos a soma algébrica dos dígitos, basta converter cada um para o tipo inteiro.

Veja funcionando no Repl.it ou no Ideone.

Nota: Funciona apenas para valores inteiros positivos, visto que tratando o valor como string, o sinal de menos é considerado como um caractere.

Answered by Woss on December 2, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP