For each of the following problems, you need to find a recursive solution. For problems involving NaturalNumber, use only the kernel methods. Do not use "tricks" like converting a NaturalNumber into a String and then solving the problem on the String.
- Implement the static method declared as follows:
/** * Returns the number of digits of {@code n}. * * @param n * {@code NaturalNumber} whose digits to count * @return the number of digits of {@code n} * @ensures numberOfDigits = [number of digits of n] */ private static int numberOfDigits(NaturalNumber n) {...}
- Implement the static method declared as follows:
/** * Returns the sum of the digits of {@code n}. * * @param n * {@code NaturalNumber} whose digits to add * @return the sum of the digits of {@code n} * @ensures sumOfDigits = [sum of the digits of n] */ private static int sumOfDigits(NaturalNumber n) {...}
- In addition to the kernel methods, for this question
(only!) you are allowed to use the NaturalNumber method add.
Implement the static method declared as follows:
/** * Returns the sum of the digits of {@code n}. * * @param n * {@code NaturalNumber} whose digits to add * @return the sum of the digits of {@code n} * @ensures sumOfDigits = [sum of the digits of n] */ private static NaturalNumber sumOfDigits(NaturalNumber n) {...}
- Implement the static method declared as follows:
/** * Divides {@code n} by 2. * * @param n * {@code NaturalNumber} to be divided * @updates n * @ensures 2 * n <= #n < 2 * (n + 1) */ private static void divideBy2(NaturalNumber n) {...}
- Implement the static method declared as follows:
/** * Checks whether a {@code String} is a palindrome. * * @param s * {@code String} to be checked * @return true if {@code s} is a palindrome, false otherwise * @ensures isPalindrome = (s = rev(s)) */ private static boolean isPalindrome(String s) {...}