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)
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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP