Гид по технологиям

Как посчитать количество цифр в числе

5 min read Программирование Обновлено 03 Jan 2026
Количество цифр в числе: методы и примеры
Количество цифр в числе: методы и примеры

Набор цифр, изображённых в блоках

Ключевая задача

Дано целое число num. Нужно подсчитать и вывести общее количество цифр в num в десятичной системе счисления.

Примеры:

  • num = 123456 → количество цифр = 6
  • num = 325 → количество цифр = 3

Важно: в статье рассматриваются целые числа. Поведение для отрицательных чисел, нуля и чисел с плавающей точкой описано в разделе «Краевые случаи». Если нужно считать цифры в других системах счисления — см. заметки о базах.

Когда какой метод выбирать — краткая подсказка

  • Итеративный метод: простой, не зависит от библиотек, безопасен для всех целых (включая ноль и отрицательные, с небольшим дополением).
  • Логарифмический метод: самый быстрый по операциям, но требует положительного числа и внимательности к погрешностям при больших числах.
  • Строковый метод: удобен и краток, но требует преобразования в строку (память) и особой обработки знака “-“.

Итеративный подход (деление на 10)

Идея: последовательно делим число на 10, пока оно не станет 0; каждое деление удаляет одну последнюю цифру.

Преимущества:

  • Работает для любых целых (после обработки знака).
  • Нет проблем с точностью.

Недостатки:

  • Проходит примерно столько шагов, сколько цифр (O(d), где d — количество цифр).

C++

// C++ program to count the total number of digits in an integer  
#include   
using namespace std;  
  
int countTotalDigits(int num)  
{  
    int result = 0;  
    while (num != 0)  
    {  
        num = num / 10;  
        ++result;  
    }  
    return result;  
}  
  
int main()  
{  
    int num1 = 123456;  
    cout << "Total number of digits in " << num1 << ": " << countTotalDigits(num1) << endl;  
  
    int num2 = 325;  
    cout << "Total number of digits in " << num2 << ": " << countTotalDigits(num2) << endl;  
    return 0;  
}

Python

# Python program to count the total number of digits in an integer  

def countTotalDigits(num):  
    result = 0  
    while num != 0:  
        num //= 10  
        result += 1  
    return result  
  
  
num1 = 123456  
print("Total number of digits in", num1, ":", countTotalDigits(num1))  
  
num2 = 325  
print("Total number of digits in", num2, ":", countTotalDigits(num2))

JavaScript

// JavaScript program to count the total number of digits in an integer  
  
function countTotalDigits(num) {  
    var result = 0;  
    while (num != 0) {  
        num = Math.floor(num / 10);  
        ++result;  
    }  
    return result;  
}  
  
  
var num1 = 123456;  
document.write("Total number of digits in " + num1 + ": " + countTotalDigits(num1) + "  \n");  
  
var num2 = 325;  
document.write("Total number of digits in " + num2 + ": " + countTotalDigits(num2) + "  \n");

Вывод для примеров совпадает: 6 и 3.

Логарифмический подход (floor(log10(n)) + 1)

Идея: количество цифр положительного целого n равно floor(log10(n)) + 1.

Преимущества:

  • Очень быстро: O(1) по числу операций.

Ограничения:

  • Требует n > 0.
  • Можно столкнуться с погрешностями для очень больших чисел или при использовании плавающей арифметики.

C++

// C++ program to count total number of digits in an integer  
#include   
using namespace std;  
  
int countTotalDigits(int num)  
{  
    return floor(log10(num) + 1);  
}  
  
int main()  
{  
    int num1 = 123456;  
    cout << "Total number of digits in " << num1 << ": " << countTotalDigits(num1) << endl;  
  
    int num2 = 325;  
    cout << "Total number of digits in " << num2 << ": " << countTotalDigits(num2) << endl;  
    return 0;  
}

Python

# Python program to count the total number of digits in an integer  
import math  
  
def countTotalDigits(num):  
    return math.floor(math.log10(num)+1)  
  
  
num1 = 123456  
print("Total number of digits in", num1, ":", countTotalDigits(num1))  
  
num2 = 325  
print("Total number of digits in", num2, ":", countTotalDigits(num2))

JavaScript

// JavaScript program to count the total number of digits in an integer  
  
function countTotalDigits(num) {  
    return Math.floor(Math.log10(num) + 1);  
}  
  
  
var num1 = 123456;  
document.write("Total number of digits in " + num1 + " : " + countTotalDigits(num1) + "  \n");  
  
var num2 = 325;  
document.write("Total number of digits in " + num2 + " : " + countTotalDigits(num2) + "  \n");

Совет: перед вызовом логарифма убедитесь, что число строго положительное. Для нуля вернёт ошибку или -inf.

Строковый подход (toString / str / to_string)

Идея: преобразовать число в строку и взять длину. Удобно и читабельно.

Преимущества:

  • Очень простой код.
  • Легко учитывать форматирование.

Недостатки:

  • Нужно удалить знак ‘-‘ для отрицательных чисел, иначе будет считаться дополнительный символ.
  • Увеличение потребления памяти на представление строки.

C++

// C++ program to count the total number of digits in an integer  
#include   
using namespace std;  
  
int countTotalDigits(int num)  
{  
    string str = to_string(num);  
    return str.size();  
}  
  
int main()  
{  
    int num1 = 123456;  
    cout << "Total number of digits in " << num1 << ": " << countTotalDigits(num1) << endl;  
  
    int num2 = 325;  
    cout << "Total number of digits in " << num2 << ": " << countTotalDigits(num2) << endl;  
  return 0;  
} 

Python

# Python program to count the total number of digits in an integer  

def countTotalDigits(num):  
    myStr = str(num)  
    return len(myStr)  
  
  
num1 = 123456  
print("Total number of digits in", num1, ":", countTotalDigits(num1))  
  
num2 = 325  
print("Total number of digits in", num2, ":", countTotalDigits(num2))

JavaScript

// JavaScript program to count the total number of digits in an integer  
  
function countTotalDigits(num) {  
    let str = num.toString();  
    return str.length;  
}  
  
  
var num1 = 123456;  
document.write("Total number of digits in " + num1 + " : " + countTotalDigits(num1) + "  \n");  
  
var num2 = 325;  
document.write("Total number of digits in " + num2 + " : " + countTotalDigits(num2) + "  \n");

Если число может быть отрицательным, используйте проверку и отбрасывайте ведущий знак: например, len(str(abs(n))).

Краевые случаи и ошибки (когда методы дают неверный результат)

  • n = 0: итеративный метод должен возвращать 1 (добавьте условие, потому что цикл while(n != 0) не выполнится). Логарифмический метод напрямую не работает (log10(0) не определён). Строковый метод вернёт 1.
  • Отрицательные числа: строковый метод посчитает знак. Уберите знак или берите abs(). Логарифмический метод требует преобразования к положительному.
  • Очень большие числа: логарифмы на плавающей арифметике могут дать погрешности; лучше использовать целочисленные методы или длинную арифметику.
  • Нецелые значения (float, double): все методы без предварительной обработки будут считаться некорректными; решите заранее, считать ли цифры в целой части или во всей записи с десятичной точкой.
  • Другие системы счисления: деление на 10 работает только для десятичной системы; для базы b используйте деление на b или формулу floor(log_b(n))+1.

Важно: всегда нормализуйте вход (проверьте на null/None/NaN, приведите к типу целого, если ожидается) перед подсчётом.

Сравнение методов — краткая шпаргалка

  • Итерация: надёжно, O(d) шагов, память O(1).
  • Логарифм: O(1) работ, требует n>0, возможны ошибки точности.
  • Строка: O(d) по времени и памяти, самый простой код, требует обработки знака.

Факто-бокс:

  • Сложность по времени: итерация O(d), строка O(d), логарифм O(1).
  • Сложность по памяти: итерация O(1), логарифм O(1), строка O(d).

Мини-методика: как выбрать метод (быстрая инструкция)

  1. Проверьте допустимые входы: допускаются ли отрицательные или ноль?
  2. Если важна самая быстрая операция и вход гарантирован > 0 — используйте логарифм.
  3. Если нужен универсальный и безопасный способ — используйте итерацию.
  4. Если нужен быстрый код для небольших чисел и важна читаемость — используйте строку и strip(‘-‘).

Роль‑ориентированные чеклисты

  • Для студента/новичка:

    • Понять идею деления на 10.
    • Реализовать итеративный вариант.
    • Добавить тесты на 0 и отрицательные числа.
  • Для backend-разработчика:

    • Подумать о диапазоне входных значений (64‑бит?) и производительности.
    • Избегать конвертаций в строку для горячих путей.
  • Для дата‑инженера/аналитика:

    • Если числа хранятся в текстовом виде — строковый метод рационален.
    • Для агрегаций используйте целочисленные операции, чтобы избежать лишней аллокации.

Тесты и критерии приёмки

Критерии приёмки:

  • Для входа 0 функция возвращает 1.
  • Для отрицательных чисел возвращается количество цифр без знака.
  • Для положительных чисел результат совпадает с количеством символов в их обычной десятичной записи.

Минимальный набор тестов:

  • 0 → 1
  • 7 → 1
  • 10 → 2
  • 999 → 3
  • -12345 → 5
  • Очень большое число (например, 10**18) → соответствующее число цифр

Примеры неправильного использования (контрпример)

  • Применять floor(log10(n))+1 к n = 0 приводит к ошибке. Нужно отдельная ветка для нуля.
  • Использовать строковый length без удаления знака для отрицательных чисел — результат будет на 1 больше.
  • Доверять логарифму для чисел на границе степени десятки из-за ошибок округления; лучше корректировать результат проверкой степени.

Шпаргалка — быстрые сниппеты

  • Итерация (псевдокод):

    • if n == 0: return 1
    • n = abs(n)
    • count = 0
    • while n > 0: n //= 10; count++
    • return count
  • Логарифм:

    • if n == 0: return 1
    • return floor(log10(abs(n))) + 1
  • Строка:

    • return len(str(abs(n)))

Краткое резюме

  • Есть три основных подхода: итерация, логарифм и строковая конверсия. Каждый имеет свои преимущества и ограничения.
  • Всегда учитывайте ноль, знак числа и диапазон значений перед выбором метода.
  • Для производительных задач предпочтительнее логарифмический (если вход > 0) или итеративный для надёжности.

Спасибо за чтение — попробуйте реализовать каждый метод и прогнать предложенные тесты, чтобы убедиться, что поведение соответствует вашим требованиям.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как обойти ограничения Facebook и удобнее им пользоваться
Facebook

Как обойти ограничения Facebook и удобнее им пользоваться

accountsd просит доступ к login keychain: причины и исправление
Mac

accountsd просит доступ к login keychain: причины и исправление

Как чистить микрофон и защитить его от микробов
Звук

Как чистить микрофон и защитить его от микробов

Микрофон не работает в CS:GO — как исправить
Гайды

Микрофон не работает в CS:GO — как исправить

Сделать Windows 8 похожей на Windows 7 и XP
Windows

Сделать Windows 8 похожей на Windows 7 и XP

Как защитить аккаунт TikTok от взлома
Кибербезопасность

Как защитить аккаунт TikTok от взлома