package Maths; /** * Find the number of digits in a number. */ public class NumberOfDigits { public static void main(String[] args) { int[] numbers = {0, 12, 123, 1234, -12345, 123456, 1234567, 12345678, 123456789}; for (int i = 0; i < numbers.length; ++i) { assert numberOfDigits(numbers[i]) == i + 1; assert numberOfDigitsFast(numbers[i]) == i + 1; assert numberOfDigitsFaster(numbers[i]) == i + 1; assert numberOfDigitsRecursion(numbers[i]) == i + 1; } } /** * Find the number of digits in a number. * * @param number number to find * @return number of digits of given number */ private static int numberOfDigits(int number) { int digits = 0; do { digits++; number /= 10; } while (number != 0); return digits; } /** * Find the number of digits in a number fast version. * * @param number number to find * @return number of digits of given number */ private static int numberOfDigitsFast(int number) { return number == 0 ? 1 : (int) Math.floor(Math.log10(Math.abs(number)) + 1); } /** * Find the number of digits in a number faster version. * * @param number number to find * @return number of digits of given number */ private static int numberOfDigitsFaster(int number) { return number < 0 ? (-number + "").length() : (number + "").length(); } /** * Find the number of digits in a number using recursion. * * @param number number to find * @return number of digits of given number */ private static int numberOfDigitsRecursion(int number) { return number / 10 == 0 ? 1 : 1 + numberOfDigitsRecursion(number / 10); } }