Soma do primeiro e último dígito

Sep 29 2020

Escrevi um código onde desejo adicionar o primeiro e o último dígito. Meu código cobre cenários de 1 dígito e 2 dígitos e 3 dígitos, mas não 4 dígitos . Além disso, não acho que meu código seja muito simples e eficiente, quero usar um loop while para cobrir todos os cenários. Alguém pode ajudar por favor?

public static void main(String[] args) {
    System.out.println(sumFirstAndLastDigit(10));
}

public static int sumFirstAndLastDigit(int number) {
    int mod = 0;
    int firstdivide = 0;
    int seconddivide = 0;
    int sum = 0;

    if (number < 0) {
        return -1;
    } else if (number > 0 && number < 10) {
        return number + number;
    } else if (number >= 10 && number < 100) {
        mod = number % 10;
        firstdivide = number / 10;
        sum = mod + firstdivide;

        return sum;
    }

    while (number > 0) {
        mod = number % 10;
        firstdivide = number / 10;
        seconddivide = firstdivide / 10;
        sum = mod + seconddivide;

        break;
    }

    return sum;
}

Respostas

3 knittl Sep 29 2020 at 18:45

Com um pouco de matemática, você pode extrair facilmente o primeiro e o último dígito de um número. O último dígito (mais à direita) é simples com módulo, o primeiro dígito (mais à esquerda) pode ser obtido calculando o logaritmo de base 10 do número.

public static int sumFirstAndLastDigit (int number) {
    if (number < 0) {
        return -1;
    }

    int lastDigit = number % 10;
    int digits = (int)Math.log10(number); // number of digits - 1 
    int firstDigit = (int)(number / Math.pow(10, digits));

    return lastDigit + firstDigit;
}
2 JohnnyMopp Sep 29 2020 at 18:41

Seu whileloop não está correto. Será sempre breakapós 1 iteração.

if (number < 0) {
    return -1;
}
// Get ones digit
int mod = number % 10;
// Keep dividing until only 1 digit left
while (number > 9) {
    number /= 10;
}
return mod + number;
1 androiddeveloper Sep 29 2020 at 18:42

Que tal este simples:

private static int sumOfFirstAndLastDigits(final int input) {
   int number = Math.abs(input);
   final int lastDigit = number % 10;
   while (number > 9)
       number = number / 10;
   return number + lastDigit;
}