Recursive Digit Sum

  • + 0 comments

    This problem can be solved mathematically. The result is a "digital root." Before beginning the usual calculations, it's necessary to prepare for them:

        public static int superDigit(String n, int k) {
            long sum = 0;
            for (int i = 0; i < n.length(); i++) { //optimising first value
                sum+= n.charAt(i) - '0'; //'0' - because n.charAt(i) - returns ASCII code instead value itself
            }
            sum*=k; //Multiplication after a single calculation
            return Math.toIntExact(1 + ((sum - 1) % 9));
        }
    

    If we don't need to calculate huge values like n=861568688536788, k=100000, we can use a simple calculation:

    1 + (Integer.parseInt(n.repeat(k)) - 1) % 9; // String.repeat since Java 11
    

    However, both options are not entirely suitable, since they do not solve the problem head-on, through a loop and recursion.