Пост из серии "спрашивали - отвечаем", довольно стандартная учебная задача, никакой особой военной хитрости нет, но раз уж, что б нет то.
Преобразование числа в строку и подсчет символов
Самый простой, дубовый, но самый медленный по времени выполнения способ. Обычно в школе за него по рукам бьют :)
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)