Hoje fiz um teste numa empresa, e um dos exercícios pedia pra criar um algoritmo que pegava um número inteiro e somava todos os dígitos, utilizando recursividade.
Foi novidade pra mim, então comecei a fazer continhas de dividir, e percebi que dividindo o número por 10, e seus quocientes sequentes também por 10, eu chegava no último quociente que era 0 (flutuante).
Os restos deixados pelas divisões eram os dígitos do número, aí só foi somá-los um a um.
public static int sumInt(int num, int sum) {
if (num < 1) return sum;
sum += num % 10;
return sumInt(num / 10, sum);
}
Na hora da prova, fiz um teste de mesa com esse código e deu erro. Mas chegando em casa executei e vi que deu certo.
Ex: 1234 => soma dá 10 (1+2+3+4).
O exercício não permitia manipular para String. Bom, confesso que em primeira instância eu faria com manipulação convertendo em String. Porco…rs…
Contudo achei interessante me fez pensar melhor e resolver um problema utilizando uma forma bacana. Alguém consegue resolver este problema de outras formas? Seria interessante compartilhar mais pra aprendizado.
public static int sumInt(int num, int sum) {
if (num < 1) return sum; // Não tem sentido mas... mantém para dar uma ilusão de ótica...
int sumGoHorse = num % 10;
sum += num % 10;
String numStr = String.valueOf(num);
String sumStr = String.valueOf(sumGoHorse);
numStr = numStr.replace(sumStr, "");
if(numStr == "") return sum;
num = new Integer(numStr); // Try Cath é para os fracos...
return sumInt(num, sum);
}
[quote=jesieltrevisan]eXtreme Go Horse, regra número 1:
Se pensou, já começou errado…
public static int sumInt(int num, int sum) {
if (num < 1) return sum; // Não tem sentido mas... mantém para dar uma ilusão de ótica...
int sumGoHorse = num % 10;
sum += num % 10;
String numStr = String.valueOf(num);
String sumStr = String.valueOf(sumGoHorse);
numStr = numStr.replace(sumStr, "");
if(numStr == "") return sum;
num = new Integer(numStr); // Try Cath é para os fracos...
return sumInt(num, sum);
}
Go Horse é seu amigo… mas ele pode ser vingativo…
:lol: [/quote]
Pois é o teste não permitia essa preciosa técnica de manipulação de String.
A primeira linha
if (num < 1) return sum;
eu coloquei pois quando o número chegasse a zero teria que parar a recursividade.
Mas o exemplo que o Adelar colocou acima foi mais simples e direto pra resolver.