Dado um número inteiro positivo calcula a soma dos dígitos dele

17 respostas
F

Dado um número inteiro positivo calcula a soma dos dígitos dele.

Ex: 25122018

2+5+1+2+2+0+1+8=21 => 2+1 => 3

Resposta final: 3

17 Respostas

TerraSkilll

E qual a sua dificuldade em específico? Você só postou o enunciado.

Pra começar a te ajudar: pesquise sobre o método toCharArray da classe String, que permite transformar uma String em uma matriz de caracteres (cada número seria uma posição). A partir daí, você pode converter os caracteres para números e somá-los.

Vai precisar também de um laço para fazer todo o processo até o total de caracteres ser 1. Opcionalmente, pode usar recursão.

Abraço.

F

Não pode usar método do java somente laço.

staroski

Você quis dizer métodos da classe String?

F

Não pode usar algo já feito pelo java.

F

Transforma isso num array de char e depois so faz o for para somar oque vc quer e tirar a soma.
talvez isso ajude, Como transformar uma String num array de char?

staroski

O professor dele proibiu o uso de métodos prontos, então ele não pode usar o toCharArray.

Então terá de usar matemática.

Imagine o número 1234 e você quer somar cada dígito.

int numero = 1234;
int unidade = numero % 10; // 4
numero /= 10; // 123
int dezena = numero % 10; // 3
numero /= 10; // 12
int centena = numero % 10; // 2
numero /= 10; // 1
int miliar = numero; // numero é menor que 10, então não divide mais

int soma = miliar + centena + dezena + unidade;

Agora é só usar a criatividade e fazer as divisões por 10 em um laço.

F

Falta um pouco de lógica.

int numero = 2222221888228799112487222;

for(int i = 0; i < numero ; i++){

    int soma=0;

    int unidade = numero % 10;
    numero /= 10;

    soma = unidade+numero ;

    System.out.printf("\nNúmero %s soma: %s  \n\n", numero, soma);

}
staroski

Essa variável tem que estar fora do laço

soma += unidade;

Só pode dividir por 10, se numero for >= 10

F
int numero = 11111111;

int soma=0;

for(int i = 0; i < numero ; i++){

    int unidade = numero % 10;
    
    numero /= 10;

    soma = unidade+numero ;

}

System.out.printf("\nNúmero %s soma: %s  \n\n", numero, soma);

run:

Número 1 soma: 2

CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

A soma deveria ser 8 e não 2.

staroski

Faz sentido esse laço ser assim?
Fez um teste de mesa?

No post anterior já mostrei que estava errada essa soma;
Fez um teste de mesa?

No post anterior já disse que só pode fazer a divisão por 10 quando o número for maior ou igual à 10.

F

Esta muito difícil de resolver esse problema .

staroski

Qual parte está difícil?
Faz um teste de mesa com o número 1234, vai ajudar a entender:

divide 1234 por 10 vai dar 123 e sobrar 4 -> unidade
divide  123 por 10 vai dar  12 e sobrar 3 -> dezena
divide   12 por 10 vai dar   1 e sobrar 2 -> centena
          1 <=  10 então não divide     1 -> milhar
F

Faz anos que não uso teste de mesa.

staroski

Por isso que está difícil. :wink:

F

:sob:

M

Scanner scanner= new Scanner(System.in);

int n=scanner.nextInt();
	 String string=Integer.toString(n);
	 int n2=string.length();

	 int soma=0;
	 for(int i =0;i<n2;i++) {
		char c=Integer.toString(n).charAt(i);
		int aux = + Integer.parseInt(String.valueOf(c));
		soma+=aux;
	 }
	
	 System.out.println(soma);
	scanner.close();
staroski

Pra não ficar convertendo String dígito por dígito, pode usar log de 10 para obter o número de dígitos e ir extraindo eles com divisões sucessivas por 10.

Veja:

/**
 * Método que recebe um número e retorna um array contendo os dígitos dele
 */
public static byte[] extrairDigitos(long numero) {
    if (numero < 0) {
        throw new IllegalArgumentException("numero não pode ser negativo");
    }
    if (numero < 10) {
        return new byte[] { (byte) numero };
    }
    byte[] digitos = new byte[(int) Math.log10(numero) + 1];
    for (int i = digitos.length - 1; i >= 0; i--) {
        digitos[i] = (byte) (numero % 10);
        numero /= 10;
    }
    return digitos;
}

Exemplo de uso:

String texto = "[telefone removido]";
int numero = Integer.parseInt(texto);
byte[] digitos = extrairDigitos(numero);
long soma = 0;
for (byte digito : digitos) {
    soma += digito;
}
System.out.println("A soma dos digitos de " + numero + " é igual a " + soma);
Criado 22 de abril de 2018
Ultima resposta 5 de fev. de 2022
Respostas 17
Participantes 5