Metoda zwracająca sumę cyfr - optymalizacja

0

Napisałem prostą metodę, która zwraca sumę cyfr jeśli podana liczba jest większa niż 10 lub -1 w innym wypadku. Moje pytanie brzmi, czy da się to w jakiś sposób zoptymalizować?

public static int sumDigits (int number) {
        int sumOfAllDigits = 0;
        int actualTenPower = 0;
        int ratio = 0;
        if (number >= 10){
            String stringNumber = Integer.toString(number);
            for (int i = (stringNumber.length()-1); i >= 0  ;i--){
                actualTenPower = (int)(Math.pow(10,i));
                ratio = number / actualTenPower;
                sumOfAllDigits += ratio;
                number -= (actualTenPower * ratio);
            }
        } else {
            sumOfAllDigits = -1;
        }
        return sumOfAllDigits;
    }
2

Raczej nie da się tego bardziej zagmatwać, prościej się da na wiele sposobów.

public static int sumDigits (int number) {
   int sum = 0;
   if(number < 10 )
      return -1;
   while (number > 0) {
      sum = sum + number % 10;
      number = number / 10;
   }
   return sum;
}

public static int sumDigits2 (int number) {
   if(number < 10 )
      return -1;
   return String.valueOf(number)
                .chars()
                .map(Character::getNumericValue)
                .sum();
    }

Jeszcze się musisz zdecydować dla jakiej wartości zwrócić -1. Bo teraz jest inaczej niż wynika z opisu.

1

Klasyczny przykład na sumę cyfr jest dość prosty:

static int sumInt(int n) {  
        if (n == 0) 
            return 0; 
        return (n % 10 + sumInt(n / 10)); 
    } 

Tylko, że wtedy nie zwracasz -1, bo w sumie suma cyfr dla liczby 8 to 8 ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1