Перейти к содержимому

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

  • автор:

Как узнать длину числа без использования строк?

Например, на вход в функцию поступает число 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

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

есть ли формула по которой можно определить длину числа 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 цифры

Похожие вопросы

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

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