Найти длину числа

Длина числа – это количество цифр в его записи. У числа 5 длина равна 1, у 407 – 3, у 1 000 000 – 7. Задача встречается в математике, олимпиадных заданиях и программировании (валидация ввода, форматирование, алгоритмы).

Ниже – три способа найти длину числа: математическая формула, цикл деления и преобразование в строку.

Введите число
Целое или дробное, можно с минусом. Для больших чисел используйте строку.
Если отмечено, считается общее количество цифр без разделителя
Метод расчёта

Формула: как найти длину числа через логарифм

Для любого целого числа n ≠ 0 количество цифр вычисляется по формуле:

L = floor(log₁₀(|n|)) + 1

Где:

  • log₁₀ – десятичный логарифм
  • |n| – модуль числа (без знака)
  • floor – округление вниз до целого

Для n = 0 длина равна 1 (особый случай, так как log₁₀(0) не определён).

Примеры расчёта

Числоnlog₁₀(n)floor+1Длина
770,845011
42421,623122
−3853852,586233
1 0001 0003,000344
99 99999 9994,9999455

Формула работает для любой системы счисления – достаточно заменить основание логарифма. Для двоичной записи: floor(log₂(|n|)) + 1.

Как определить количество цифр в числе без логарифма

Если логарифмы недоступны (младшие классы, ограничения задачи), подходит цикл деления на 10.

Алгоритм:

  1. Взять модуль числа
  2. Установить счётчик = 0
  3. Пока число > 0: разделить нацело на 10, увеличить счётчик на 1
  4. Если исходное число = 0, вернуть 1

Пример для числа 4 028:

  • 4 028 ÷ 10 = 402 → счётчик 1
  • 402 ÷ 10 = 40 → счётчик 2
  • 40 ÷ 10 = 4 → счётчик 3
  • 4 ÷ 10 = 0 → счётчик 4

Результат: 4 цифры.

Как найти длину числа в Python, JavaScript и C++

Python

def length_str(n):
    return len(str(abs(n)))

import math
def length_log(n):
    if n == 0:
        return 1
    return math.floor(math.log10(abs(n))) + 1

def length_loop(n):
    n = abs(n)
    if n == 0:
        return 1
    count = 0
    while n > 0:
        n //= 10
        count += 1
    return count

JavaScript

// Через строку
const lengthStr = (n) => Math.abs(n).toString().length;

// Через логарифм
const lengthLog = (n) => (n === 0 ? 1 : Math.floor(Math.log10(Math.abs(n))) + 1);

C++

#include <cmath>

int numberLength(long long n) {
    if (n == 0) return 1;
    if (n < 0) n = -n;
    return static_cast<int>(std::floor(std::log10(n))) + 1;
}

Какой способ выбрать

КритерийЛогарифмЦикл деленияСтрока
СложностьO(1)O(d)O(d)
Точность для очень больших чиселВозможны ошибки округления floatТочныйТочный
Простота кодаСредняяПростаяСамая простая
Работа без библиотекНужен mathДаДа

d – количество цифр в числе.

Для чисел до 15–17 цифр (диапазон double/float64) логарифм работает корректно. Для произвольно больших целых (например, BigInt в JavaScript или длинная арифметика в Python) безопаснее использовать строковый метод или цикл.

Частные случаи

  • Отрицательные числа – перед вычислением берите модуль. Знак не считается цифрой.
  • Дробные числа – стандартная формула применяется к целой части. Если нужно общее число цифр, переведите в строку и уберите разделитель.
  • Числа с ведущими нулями – в математике ведущие нули не учитываются (007 = 7, длина 1). В строковом представлении они могут сохраняться – зависит от задачи.
  • Степени десятки – граничный случай для формулы: log₁₀(1 000) = 3,000, floor(3,000) = 3, +1 = 4. Всё корректно.

Часто задаваемые вопросы

Какая длина у числа 0?
Длина числа 0 равна 1. Ноль – единственное число, для которого формула с логарифмом не работает напрямую (log₁₀(0) не определён), поэтому этот случай обрабатывают отдельно.
Учитывается ли знак минус при определении длины числа?
Нет. Длина числа – это количество его значащих цифр. Знак минус не является цифрой, поэтому перед вычислением берут модуль числа. Длина −742 равна 3, как и у 742.
Как найти длину дробного числа, например 3,14?
Обычно длину определяют только для целой части. Если нужно общее количество цифр (без учёта разделителя), число переводят в строку, удаляют точку/запятую и считают символы. Для 3,14 это 3 цифры.
Какой способ определения длины числа самый быстрый в программировании?
Математический метод через логарифм работает за O(1) – постоянное время, не зависящее от величины числа. Преобразование в строку и цикл деления работают за O(d), где d – количество цифр. Для очень больших чисел разница ощутима.
Работает ли формула с логарифмом для чисел в других системах счисления?
Да. Для системы с основанием b формула выглядит так: floor(log_b(|n|)) + 1. Например, для двоичной системы используют log₂, для восьмеричной – log₈.
Почему floor(log10(n)) + 1, а не просто log10(n)?
Логарифм возвращает дробное значение. Например, log₁₀(99) ≈ 1,9956, а цифр в числе 2. Операция floor (округление вниз) отбрасывает дробную часть, а +1 корректирует результат, давая точное количество цифр.
  1. Заполнить случайными числами: онлайн и в коде
  2. Как найти наибольшую цифру числа: методы и расчет
  3. Генерировать число: программа и алгоритмы
  4. Алгоритм вычисления четных и нечетных чисел: математика и код
  5. Вычисление и перевод в десятичную систему счисления
  6. Программа для вычисления 3 чисел