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
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.
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
Faz anos que não uso teste de mesa.
Por isso que está difícil.
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);