Q:

¿Cómo trabaja cada uno de estos códigos?

Podrían aurdarme por favor con comentarios en los siguientes código explicando cómo trabajan, quisiera entender mejor cómo trabajan los diferentes operadores.
//Suma de los dígitos de un número natural
public static int sumDigits(int num) {
    int sum = 0;

    while (num > 0) {
        sum += num % 10;
        num /= 10;
    }
    return sum;
}

//Cantidad de dígitos de un número natural
public static int quantityDigits(int num) {
    int quantity = 0;

    while (num > 0) {
        quantity++;
        num /= 10;
    }
    return quantity;
}

//Cantidad de dígitos diferentes de un número natural
public static int differentsDigits(int num) {
    int quantity = 0;
    String differentsDigits = "";

    do {
        String digit = "" + (num % 10);

        if (differentsDigits.indexOf(digit) == -1) {
            quantity++;
            differentsDigits += digit;
        }
        num /= 10;
    } while (num > 0);

    return quantity;
}

//Dígito máximo de un número natural
public static int maxDigit(int num) {
    int max = 1;

    while (num > 0) {
        int remainder = num % 10;
        if (remainder > max) {
            max = remainder; 
        }
        num /= 10;
    }

    return max;
}

//Determinar si el número es palíndromo
public static void palindromeNumber(int num) {
    int n = num;
    int reverse = 0, remainder;
    while (num > 0) {
        remainder = num % 10;
        reverse = reverse * 10 + remainder;
        num /=10;
    }
    if (reverse == n)
        View.input("The number is palindrome.");
    else 
        View.input("The number isn't palindrome.");
}

//Determinar si el número es primo
public static void primeNumber(int num) {
    boolean prime = true;
    if (num < 2) 
        prime = false;
    else {
        for (int i = 2; i*i <= num; i++) {
            if ((num % i) == 0) {
                prime = false; 
                break;
            }
        }
    }
    if (prime)
        View.input("The number is prime.");
    else 
        View.input("The number isn't prime.");

}

//Obtener los divisores primos de un número natural
public static void dividers(int num) {
    for (int i = 2; i <= num; i++) {
        if ((num % i) == 0) {
            boolean simple = true;
            for (int j = 2; j <= i/2; j++) {
                if ((i % j) == 0) {
                    simple = false;
                    break;
                }
            }
        if (simple) 
            System.out.printf("%d ", i);
        }
    }
}

//Obtener el máximo común divisor de dos números naturales
public static int gcd(int a, int b) {
    while (b > 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

//Obtener el mínimo común múltiplo de dos números naturales
public static int lcm(int a, int b) {
    return a * (b / gcd(a,b));
}

Gracias de antemano.

A:

Buenas, te pongo comentarios en tu código: 
//Suma de los dígitos de un número natural
public static int sumDigits(int num) {
    int sum = 0;
    //mientras variable num sea más grande que 0 hacer...
    while (num > 0) {
        //módulo de num y 10 (el residuo de variable num y 10)
        sum += num % 10;
        //dividir num entre 10 ( num = num/10)
        num /= 10;
    }
    //devolver variable
    return sum;
}

//Cantidad de dígitos de un número natural
public static int quantityDigits(int num) {
    int quantity = 0;
//mientras variable num sea más grande que 0 hacer...
    while (num > 0) {
        // sumar 1 a variable quantity
        quantity++;
         //dividir num entre 10 ( num = num/10)
        num /= 10;
    }
    //devolver variable
    return quantity;
}

//Cantidad de dígitos diferentes de un número natural
public static int differentsDigits(int num) {
    int quantity = 0;
    String differentsDigits = "";
    // hacer...
    do {
        // concatenar "" y resultado del residuo de num/10
        String digit = "" + (num % 10);
        //si el índice del string en la posición digit es -1
        if (differentsDigits.indexOf(digit) == -1) {
            //sumar +1 a quantity
            quantity++;
            // esto es lo mismo que differentsDigits = differentsDigits + digit;
            differentsDigits += digit;
        }
        // num = num/10
        num /= 10;
        // mientras num sea mayor a 0
    } while (num > 0);
//devolver variable
    return quantity;
}

//Dígito máximo de un número natural
public static int maxDigit(int num) {
    int max = 1;
    //mientras num sea mayor a 0 hacer...
    while (num > 0) {
        // remainder guardo el módulo de num/10
        int remainder = num % 10;
        //si remainder es mayor a max 
        if (remainder > max) {
            //max es igual a remainder
            max = remainder; 
        }
        // num = num/10
        num /= 10;
    }
    //devolver variable
    return max;
}

//Determinar si el número es palíndromo
public static void palindromeNumber(int num) {
    // n tendrá valor num
    int n = num;
    // inicializo un int a 0 el otro no (remainder)
    int reverse = 0, remainder;
    //mientras num sea mayor a 0...
    while (num > 0) {
        //remainder contendrá el módulo de num/10
        remainder = num % 10;
        //reverse será el resultado de valor de (reverse*10) más valor remainder
        reverse = reverse * 10 + remainder;
        // num = num/10
        num /=10;
    }
    //si reverse es igual a n 
    if (reverse == n)
        //mostrar a pantalla
        View.input("The number is palindrome.");
        //sino 
    else 
    //idem
        View.input("The number isn't palindrome.");
}

//Determinar si el número es primo
public static void primeNumber(int num) {
    //variable booleana solo puede ser true o false
    boolean prime = true;
    if (num < 2) 
        prime = false;
    else {
        for (int i = 2; i*i <= num; i++) {
            if ((num % i) == 0) {
                prime = false; 
                break;
            }
        }
    }
    if (prime)
        View.input("The number is prime.");
    else 
        View.input("The number isn't prime.");

}

//Obtener los divisores primos de un número natural
public static void dividers(int num) {
    // bucle como el while pero en este sabemos las veces que hemos de iterar
    for (int i = 2; i <= num; i++) {
        if ((num % i) == 0) {
            boolean simple = true;
            for (int j = 2; j <= i/2; j++) {
                if ((i % j) == 0) {
                    simple = false;
                    //si se cumplen estas condiciones y se ejecuta el break salimos immediatamente del bucle
                    break;
                }
            }
            //si variable simple es true...
        if (simple) 
        //mostrar a pantalla
            System.out.printf("%d ", i);
        }
    }
}

//Obtener el máximo común divisor de dos números naturales
public static int gcd(int a, int b) {
    while (b > 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    //devolver variable
    return a;
}

//Obtener el mínimo común múltiplo de dos números naturales
public static int lcm(int a, int b) {
    // devolvemos operación
    return a * (b / gcd(a,b));
}

No te he comentado cada línea puesto que se repiten las operaciones y las maneras de programar. 
java

