Как узнать длину числа без использования строк?
Например, на вход в функцию поступает число 12345. Результатом будет 5. Даже если число отрицательное, например, -1234567, то результатом будет 7.
Отслеживать
задан 18 мая 2022 в 17:53
11 1 1 серебряный знак 5 5 бронзовых знаков
на какой вход ? Если это поток, то можно даже не считать число.
18 мая 2022 в 18:04
@ARHovsepyan а если это бинарное представление в потоке а не десятчиное?
18 мая 2022 в 18:04
@ARHovsepyan, в метках же написано алгоритм и функции
18 мая 2022 в 18:08
@Владимир Клыков, вы лучше не повторяйте чужие ответы. А число 12345 никак не бинарное представление.(а если так, то и ваш ответ не верный, потому что пока нет числа)
18 мая 2022 в 18:11
@Pingvy, И что. любое решение можно выполнить в функции.
18 мая 2022 в 18:13
5 ответов 5
Сортировка: Сброс на вариант по умолчанию
int length(int n) < int l = 0; do < l++; n /= 10; >while(n); return l; >
Отслеживать
ответ дан 18 мая 2022 в 18:02
Владимир Клыков Владимир Клыков
4,314 2 2 золотых знака 27 27 серебряных знаков 43 43 бронзовых знака
Или даже так int l = 0; do < l++; >while (n /= 10);
18 мая 2022 в 18:56
@avp Да =) уже додумался до такого 🙂 но через for как в примере выше — красивше
18 мая 2022 в 18:57
int length(int n) < if (n == 0) return 1; int l = 0; while(n) < l++; n /= 10; >return l; >
int length(int n) < int l = 1; for(; n/=10; ++l); return l; >
Отслеживать
ответ дан 18 мая 2022 в 17:58
12.5k 2 2 золотых знака 19 19 серебряных знаков 44 44 бронзовых знака
Простите что так нагло утащил ваш код, но имхо — do while красивше 🙂
18 мая 2022 в 18:02
Да да 🙂 так прям оно!
18 мая 2022 в 18:06
@ВладимирКлыков Нет, там все же была ошибка. Сейчас подумаю.
18 мая 2022 в 18:07
@ВладимирКлыков Теперь можно смотреть 🙂
18 мая 2022 в 18:11
Блин, ляпота 🙂 не додумался. седин мне в голову.
18 мая 2022 в 18:12
Для работы с log10 и abs необходимо подключить библиотеку math.h (Для типа int работает корректно)
int lenNum(int value)
Если же входные данные типа long или long long, то лучше обойтись обычным же стопудовым вариантом — через циклы. (Выше коллеги представили множество подобных решений).
int lenNumLL(long long value) < int len = 0; do < value /= 10; len++; >while (value); return len; >
Найти длину числа на Python
Cоздайте Python функцию, которая принимает на вход число num и используя только математические и логические операции (без использования функции len()), вычисляет и возвращает количество цифр в этом числе.
Примеры:
number_length(19) # 2 number_length(4840) # 4 number_length(0) # 1
Примечания:
Использование функции len() запрещено.
Варианты решения:
def number_length(num): if num == 0: return 1 length = 0 num = abs(num) while num > 0: num //= 10 length += 1 return length
В этом решении, мы используем цикл while для итерации по цифрам числа. На каждой итерации цикла, мы удаляем последнюю цифру числа, используя операцию целочисленного деления (//) на 10. Поскольку мы удаляем одну цифру на каждой итерации, то количество итераций равно количеству цифр в числе.
abs() в Python это функция, которая возвращает абсолютное значение числа (модуль числа). Например abs(-5) вернет 5, abs(5) вернет 5.
Еще один вариант решения может быть использование математического метода log10, чтобы определить длину числа как количество цифр в нем.
import math def number_length(num): if num == 0: return 1 num = abs(num) return math.floor(math.log10(num)) + 1
math.log10(x) – это функция из модуля math в Python, которая возвращает десятичный логарифм числа x . Логарифм числа x по основанию 10 – это такое значение y, для которого 10 ** y = x (10 в степени y равно x).
math.floor(x) это функция которая округляет значение в меньшую сторону, например: math.floor(4.9) = 4
В данном случае мы используем его чтобы округлить десятичный логарифм числа в меньшую сторону, потому что длина числа не может быть дробной.
Также можно решить задачу с помощью рекурсии. Но это может быть не самым оптимальным решением и может привести к переполнению стека если число будет большим.
def number_length(num): if num == 0: return 1 return 1 + number_length(num // 10)
В этом решении мы рекурсивно вызываем функцию number_length с числом, деленным на 10 на каждом шаге рекурсии, таким образом каждый раз удаляя последнюю цифру числа. Количество рекурсивных вызовов равно количеству цифр в числе, поэтому мы можем просто возвращать 1 + результат рекурсивного вызова функции.
Как узнать длину числа в битах?
Можете, пожалуйста, объяснить, что такое «длина числа в битах», что нужно делать, чтобы ее определить?
Вот допустим в википедии написано, что мне надо взять число в 1024 бита, а снизу пример, и там число это, только мне кажется, что у них оно меньше.
Расскажите, пожалуйста, как это работает?
- Вопрос задан более трёх лет назад
- 10708 просмотров
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. Нужно запомнить, что для него тоже нужен один бит 🙂
есть ли формула по которой можно определить длину числа 2 в степени Н зная только Н?
Что такое «длина числа»? Количество десятичных знаков? Да — логарифм по основанию 10 от числа дает количество знаков в нем (точнее, int(log10(n))+1), где int — целая часть числа. Дальше — элементарная математика.
Конечно.
H*log(2) приблизительно H*0,301 Дает количество десятичных разрядов (степеней 10)
2**7=128 по формуле будет 7*0,301=2,107 — длина 3 цифры
2**10 =1024 по формуле будет 10*0,301=3,01 — длина 4 цифры
Похожие вопросы