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

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

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.

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

Você quis dizer métodos da classe String?

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

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?

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.

1 curtida

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);

}

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

soma += unidade;

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

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.

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.

Esta muito difícil de resolver esse problema .

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
1 curtida

Faz anos que não uso teste de mesa.

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

:sob:

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();

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 = "1234567890";
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);