Как узнать длину числа c
Перейти к содержимому

Как узнать длину числа c

  • автор:

Количество цифр

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

Длина строки

Это очень простой вариант определения количества цифр, заключается в переводе числа в строковое представление с последующим определением длины строки.

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

Therapyx

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

reverse_kacejot

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. Нужно запомнить, что для него тоже нужен один бит 🙂

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *