Количество цифр
Время от времени перед программистом стает задача нахождения количества цифр в числе. Есть много способов решения этой задачи. В статье мы рассмотрим наиболее популярные из них.
Длина строки
Это очень простой вариант определения количества цифр, заключается в переводе числа в строковое представление с последующим определением длины строки.
public int CountDigitByString(int n) < return Math.Abs(n).ToString().Length; >
Такой метод компактный и интуитивно понятный, однако он сильно проигрывает в быстродействии другим вариантам.
Десятичный логарифм
Использование десятичного логарифма для определения количества цифр в числе, позволяет производить вычисление за линейное время.
public int CountDigitsByLog10(int n) < return (n == 0) ? 1 : (int)Math.Log10(Math.Abs(n)) + 1; >
Сравнение
Самый быстрый из приведенных методов.
private static readonly int[] Numbers = new [] < 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 >; public int CountDigitsByCompare(int n) < n = Math.Abs(n); for (var i = 0; i < Numbers.Length; i++) < if (n < Numbers[i]) < return i + 1; > > return 10; >
Деление нацело
С использованием цикла
public int CountDigitsByDiv(int n) < var count = (n == 0) ? 1 : 0; while (n != 0) < n /= 10; count++; > return count; >
Рекурсивно
public int CountDigitsByDivRecursive(int n) < return (n 9) ? 1 : CountDigitsByDivRecursive(n / 10) + 1; >
Разбивка числа на отдельные цифры
Разбив число на отдельные цифры, мы получаем возможность нахождения:
- количества цифр;
- количества четных и нечетных;
- количества различных(уникальных) цифр числа;
- суммы цифр числа.
public Listint> IntToDigit(int n) < n = Math.Abs(n); var digits = new Listint>(); while (n > 0) < int digit = n % 10; n /= 10; digits.Add(digit); > return digits; >
Количество четных
public int EvenCount(int n) < var digits = IntToDigit(n); var count = 0; foreach (var d in digits) < if (d % 2 == 0) < count++; >> return count; > //сокращенная форма записи с использованием Linq public int EvenCountLinq(int n) < return IntToDigit(n).Count(x => x % 2 == 0); >
Количество нечетных
public int OddCount(int n) < var digits = IntToDigit(n); var count = 0; foreach (var d in digits) < if (d % 2 != 0) < count++; >> return count; > public int OddCountLinq(int n) < return IntToDigit(n).Count(x => x % 2 != 0); >
Количество различных цифр в числе
public int CountUniqueDigits(int n) < var a = new int[9]; foreach (var d in IntToDigit(n)) < a[d]++; >var countUnique = 0; foreach (var x in a) < if (x > 0) < countUnique++; >> return countUnique; >
Сумма цифр числа
public int SumDigits(int n) < var sum = 0; foreach (var d in IntToDigit(n)) < sum += d; >return sum; > //использование Linq сокращает запись public int SumDigitsLinq(int n) < return IntToDigit(n).Sum(); >
Как узнать длину числа в java
Самый простой способ узнать длину числа в Java – это вариант решения через строки. Нужно преобразовать число в строку и узнать длину строки. Рассмотрим на примере:
var num = 234; var length = String.valueOf(num).length(); System.out.println(length); // => 3
Как определить длину числа с нуля?
Нужно, чтоб программа понимала, что пользователь вводит 01 или 02, а не 1 или 2.
- Вопрос задан более трёх лет назад
- 1158 просмотров
Комментировать
Решения вопроса 1
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
std::string str; std::getline(std::cin, str); std::cout
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 1

Data Science
Программа и так поймет, что 01 это 1. Int числа хранятся в бинарном формате 1 = 0001, 2 = 0010, 3= 0011. 8 = 1111
Если же тебе надо просто выводить на экран имея первый ноль, то используй std::setwidth и std::setfill.
int digit = 1; std::cout
или же второй вариант, принимать 01, 02, 03 типом string.
Ответ написан более трёх лет назад
Как узнать длину числа в битах?
Можете, пожалуйста, объяснить, что такое "длина числа в битах", что нужно делать, чтобы ее определить?
Вот допустим в википедии написано, что мне надо взять число в 1024 бита, а снизу пример, и там число это, только мне кажется, что у них оно меньше.
Расскажите, пожалуйста, как это работает?
- Вопрос задан более трёх лет назад
- 10563 просмотра
2 комментария
Простой 2 комментария
Что-то мне подсказывает, что если вы не понимаете основ вроде длины числа в битах, вам рано читать про цифровые подписи, это на порядок более сложная математика.
NikSIk31 @NikSIk31 Автор вопроса
Moskus, и то верно
Решения вопроса 1
"I'm here to consult you" © Dogbert
как это "длина числа в битах", что нужно делать чтобы ее определить.
Это количество бит необходимых для записи числа.
Нужно взять следующее бОльшее целое число после логарифма числа по основанию 2. Т.е. 1 -- 1 бит, 2 -- 2 бита, 3 -- 2 бита, 4 -- 3 бита. 1023 -- 10 битов, 1024 -- 11 битов. 179,769,313,486,231,590,772,930. 304,835,356,329,624,224,137,215 (309 цифр) -- 1024 бита, 179,769,313,486,231,590,772,930. 304,835,356,329,624,224,137,216 -- 1025 битов.
Ответ написан более трёх лет назад
Нравится 2 2 комментария
NikSIk31 @NikSIk31 Автор вопроса
Омайгад, как с таким числом то взаимодействовать, оно наверное и в int не поместится в С++
оно наверное и в int не поместится в С++
NikSIk31, в один -- не поместится. В 32 (если int 32-битный) -- поместится.
Ответы на вопрос 2

Max Goncharenko @reverse_kacejot
Junior C++ Developer, bachelor of Applied Math
Чтобы определить сколько минимум нужно бит для хранения числа, нужно взять его логарифм по основанию 2 (предварительно нужно добавить 1, потому как 0 мы тоже учитываем). Если результат не целый (число не является степенью 2), то стоит округлить его в большую сторону:
log2(255 + 1) = 8 - значит число влезет в 8 бит
log2(256 + 1) = 8.0056. - округляем до 9
Данная схема не работает для 0. Нужно запомнить, что для него тоже нужен один бит 🙂