Толик Панков
hex_laden
............ .................. ................
December 2025
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

Толик Панков [userpic]
C#, Количество цифр (разрядов) числа.

Пост из серии "спрашивали - отвечаем", довольно стандартная учебная задача, никакой особой военной хитрости нет, но раз уж, что б нет то.

Преобразование числа в строку и подсчет символов


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

static int CountDigitsStr(int n)
{
    return ((int)Math.Abs(n)).ToString().Length;
}


Получаем модуль числа [(int)Math.Abs(n)], чтоб исключить ситуацию, если в n окажется отрицательное число, преобразуем число в строку и получаем количество символов в строке, т.е. количество цифр числа.

Подсчет цифр делением нацело


Способ заключается в том, чтобы последовательно делить число на 10, оставляя от деления целую часть, пока целая часть не станет равна 0.

Можно сделать в двух вариантах.

В цикле:

static int CountDigitsCycle(int n)
{
    n = (int)Math.Abs(n); //берем модуль числа
    int count = 0; //заводим счетчик
    if (n == 0) count = 1; // n == 0? Цифра одна.
    while (n != 0) //пока n не равно 0
    {
        n = n / 10; //делим число на 10
        count++; //прибавляем счетчик
    }
    return count;
}


Какая-то специальная функция для деления нацело в C# не нужна, при делении переменной цельночисленного типа (byte, sbyte, short, ushort, int, uint, long, ulong) на целое число или цельночисленную переменную, результатом будет целое число, т.е. деление нацело произойдет автоматически.

Рекурсией:

static int CountDigitsRec(int n)
{
    n = (int)Math.Abs(n);
    if (n <= 9)
    {
        return 1;
    }
    else
    {
       return CountDigitsRec(n / 10) + 1;
    }
}


Использование десятичного логарифма.


static int CountDigitsLog10(int n)
{
    if (n == 0)
    {
        return 1;
    }
    return (int)Math.Log10(Math.Abs(n)) + 1;
}


Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2021/01/16/c-kolichestvo-tsifr-razryadov-chisla/

Tags: ,