C#, Количество цифр (разрядов) числа.

Jan 17, 2021 04:06

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

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

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

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/
(
Comments
|Comment on this)

csharp, it

Previous post Next post
Up