
Способы найти количество цифр в числе
С большой вероятностью можно предположить, что у каждого программиста была хоть раз такая задача. Есть много способов для нахождения количества цифр. В статье будут представлены несколько функций от самых банальных, и не очень.
1. Длина строки
Довольно банальный способ — это нахождения длинны строки. Это не самый быстрый способ, но для очень простых задач подходит.
2. Цикл с делением
Распространённый способ, скорость которого линейно зависит от длины числа.
3. Десятичный логарифм и округление
Логарифм работает за константное время, преимущество которого на больших числах.
Можно использовать не только Math.ceil это лишь один из вариантов использования логарифма.
4. Сравнение
Быстрый, но не практичный способ из-за количества кода только для int ушло 38 строк. Конечно найдутся умельцы, которые смогут сделать красивее, и понятней. Не буду оставлять код для long, а оставлю для int, но думаю принцип ясен.
Рейтинг выглядит так:
1. Сравнения (показывают лучший результат)
2. Логарифм
3. Деление
4. String (наихудший результат)
1. Длина строки
Довольно банальный способ — это нахождения длинны строки. Это не самый быстрый способ, но для очень простых задач подходит.
public int getCountsOfDigits(long number) {
return String.valueOf(Math.abs(number)).length();
}
2. Цикл с делением
Распространённый способ, скорость которого линейно зависит от длины числа.
public int getCountsOfDigits(long number) {
int count = (number == 0) ? 1 : 0;
while (number != 0) {
count++;
number /= 10;
}
return count;
}
3. Десятичный логарифм и округление
Логарифм работает за константное время, преимущество которого на больших числах.
public static int getCountsOfDigits(long number) {
return(number == 0) ? 1 : (int) Math.ceil(Math.log10(Math.abs(number) + 0.5));
}
Можно использовать не только Math.ceil это лишь один из вариантов использования логарифма.
4. Сравнение
Быстрый, но не практичный способ из-за количества кода только для int ушло 38 строк. Конечно найдутся умельцы, которые смогут сделать красивее, и понятней. Не буду оставлять код для long, а оставлю для int, но думаю принцип ясен.
Код
public static int getCountsOfDigits(int n) {
if (n < 100000) {
if (n < 100) {
if (n < 10) {
return 1;
} else {
return 2;
}
} else {
if (n < 1000) {
return 3;
} else {
if (n < 10000) {
return 4;
} else {
return 5;
}
}
}
} else {
if (n < 10000000) {
if (n < 1000000) {
return 6;
} else {
return 7;
}
} else {
if (n < 100000000) {
return 8;
} else {
if (n < 1000000000) {
return 9;
} else {
return 10;
}
}
}
}
}
Рейтинг выглядит так:
1. Сравнения (показывают лучший результат)
2. Логарифм
3. Деление
4. String (наихудший результат)
Комментарии 41
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.