Как найти младший разряд питон

Для заданого положительного целого A (1 ≤ A ≤ 100), вывести младший бит A.
К примеру, если A = 26, то его мы можем записать в двоичном виде, как 11010,
младший бит A составляет 10, и на выходе должно быть 2.Другой пример выглядит следующим образом: при A = 88, это число A мы можем записать в
двоичной форме 1011000, младший бит у A является 1000, и на выходе должно быть 8.

Входные данные
Каждая строка входных данных содержит только одно целое число A (1 ≤ A ≤ 100). Строка, которая
содержащий “0” обозначает конец ввода, и эта строка не является частью входных данных.
Исходные данные:
для каждого числа a, полученного на входе, в отдельной строке вывести его значение
младшего бита.
Нужно написать на Python

задан 11 фев в 10:14

Екатерина's user avatar

3

можно проверять делимость на степени двойки

A = 88
t = 2
while not A % t:
    t *= 2

print(t//2) # 8

ответ дан 11 фев в 10:36

splash58's user avatar

splash58splash58

16.4k2 золотых знака15 серебряных знаков24 бронзовых знака

Младший бит числа можно найти, преобразовав его в двоичный вид и находя первый “1” в справа. Мы можем преобразовать число в двоичный вид с помощью встроенной функции bin в Python.

def find_least_significant_bit(a):
    binary = bin(a)
    least_significant_bit = binary.rfind("1") + 1
    return 2**(len(binary) - least_significant_bit)

Чтобы использовать эту функцию, нам нужно читать числа, пока они не равны 0, и вызывать find_least_significant_bit для каждого из них:

while True:
    a = int(input().strip())
    if a == 0:
        break
    print(find_least_significant_bit(a))

PS. Надеюсь хоть не много помог)

ответ дан 11 фев в 10:28

microup's user avatar

microupmicroup

6654 серебряных знака18 бронзовых знаков

2

Ммм…. Я все же останусь в касте истинно верующих в то, что “младший бит” любого числа это всегда последний разряд в двоичном представлении и он получается просто как результат остатка от деления на 2

A = 88
bit = A % 2
print(f"Младший бит числа {A} равен {bit}n")

Выведет:

Младший бит числа 88 равен 0

Но если вдруг все же вам надо найти первый значимый (равный единице) бит справа и вернуть полученное таким образом число, то… Вообще-то можно представить число в двоичной форме, преобразовать в строку, разбить на подстроки по разделителю “1”. Длина последнего элемента массива будет искомой степенью двойки )))

Такой вот забавный код

A = 88
Anew = str(bin(A))
print(f"{A} в двоичной записи равно {Anew}")
Anew = Anew.split('1')
degree = len(Anew[-1])
print(f"Наименьшее значимое справа будет 1{Anew[-1]}")
res = 2**degree
print(f"2 в степени {degree} будет {res}n")

Выведет:

88 в двоичной записи равно 0b1011000
Наименьшее значимое справа будет 1000
2 в степени 3 будет 8

ответ дан 12 фев в 20:01

Дмитрий's user avatar

ДмитрийДмитрий

3451 серебряный знак7 бронзовых знаков

Егор Лысенко



Ученик

(175),
закрыт



1 год назад

Например, 42 на 4 и 2. Помню вроде через цикл for можно

InviZzzible

Мудрец

(10393)


2 года назад

Там должна быть и для этого случая библиотека =)))
а вообще остаток от деления на 10 дает тебе крайнее число, чтобы порезать чесло на разряд делишь его на 10 и смотришь если оно не ноль, то берешь остаток уже от порезанного числа. под конец цикла итоговый массив разрядов реверсируешь и получаешь массив исходного числа…

Егор ЛысенкоУченик (175)

2 года назад

чего? Я просто только начал язык, обьясни как сделать

Алекс Куха
Высший разум
(427176)
Егор Лысенко, ты вопрос не в ответы вбивай, а в поиск. Ответы уже там лежат

Я ищу, на наш взгляд, простой способ найти наименее значимую цифру в числе (float или integer).

Например:

101 → 1

101,2 → 0,2

1.1003 → 0,0003

Случаи, такие как 10, 100, 1000 и т.д., Немного менее актуальны, хотя меня бы интересовали независимо.

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

Например:

101.2 → 0,1 или 10 ^ -1 (или даже -1 для соответствующей мощности/экспоненты).

Для дополнительного контекста, что я пытаюсь сделать:

Допустим, у меня есть номер 31.6. Я хочу, чтобы он мог превратить это в 31.5 (уменьшить наименее значимую цифру на 1). Допустим, у меня есть номер 16, я хочу превратить это в 15 (та же идея). Если у меня есть номер 100, я все равно хочу превратить это в 99, но я, вероятно, могу выяснить, где находится обращение к делу (без указания 100.0, я думаю, что 1 является наименее значащей цифрой и уменьшается на 1, дает вам 0, что не является что я хочу). Это, в свою очередь, связано с ручным манипулированием разрывами классов в диапазонах данных (хотя и отключается).

Отображение моей домашней работы: это выглядит многообещающим (часть lessSigDigit), но возвращает цифру без какой-либо (математической) ссылки на силу цифры (и я тоже надеюсь избежать чередования строк).

Это было то, что пришло, когда я qaru.site/questions/1805123/… но не кажется полезным (если я неправильно использую терминологию/поисковые фразы)

Asked
7 years, 3 months ago

Viewed
2k times

I have a Python program that gets some integers from MySQL. The field in the database is of type INT and length 10, unsigned. I wonder when I retrieved such a integer in a Python program, what its size will be? And then what should I do to get only the lower 16 bits (it’s supposed to be 32-bit)?

  • python

asked Feb 18, 2016 at 0:57

J Freebird's user avatar

J FreebirdJ Freebird

3,5727 gold badges45 silver badges80 bronze badges

7

  • it’ll be the normal size of a python integer (64 bits?), and you can get the lower 16 bits by using the bitwise & operator.

    Feb 18, 2016 at 1:02

  • @mgilson int & 0xffff?

    Feb 18, 2016 at 1:06

  • Yep, that looks right to me 🙂

    Feb 18, 2016 at 1:09

  • @mgilson thanks man.

    Feb 18, 2016 at 1:35

  • I was just saying that you should assume it’s a Python’s long (which is different than native long, it has unlimited precision). Check Python Numeric Types for details. Python will convert the value to the smallest type that is able to hold it (Python’s int). Check sys.maxint value (dependent on OS’s ILP). For example, in WIN(64) type(2147483647) == int and type(2147483648) == int (both 10 digits) yields different results. Nevertheless, the least significant 16 bits will always be Python’s int.

    Feb 18, 2016 at 10:09

1 Answer

num <- from db
last_16bit = 0
for i in range(16):
    last_16bit = 2*last_16bit + num%2
    num= num>>1

answered May 8, 2021 at 9:09

Aditya Kumar B18CSE003's user avatar

1

  • While this code snippet may solve the problem, it doesn’t explain why or how it answers the question. Please include an explanation for your code, as that really helps to improve the quality of your post. Remember that you are answering the question for readers in the future, and those people might not know the reasons for your code suggestion. You can use the edit button to improve this answer to get more votes and reputation!

    May 8, 2021 at 11:05

  • The Overflow Blog
  • Featured on Meta

Related

Hot Network Questions

  • How does one determine how a PC is going to die of old age(naturally)?

  • On Zagier’s missing continued fraction with multiple limits?

  • Predicting health of power supplies

  • Can You Make A Tiny Nuclear Reactor By Employing Supercritical Conditions For Brief Periods Of Time?

  • Does “sudo” relies on “su” in anyway?

  • Is DANE-EE TLSA version 3 (Domain-issued certificate from rfc6698) still supported in 2023?

  • Received an ultimatum from PhD advisor to leave that broke me completely

  • 1990s Hentai game involving characters based on traditional European fairy tales

  • Is it safe to visually inspect evaporator coil myself?

  • TV film or mini-series about an isolated matriarchal community, accessible via a wooden bridge

  • Massless Particle SR

  • Make sense of this mess!

  • Does a Polearm Master with 10′ reach get an attack of opportunity vs an enemy 10′ away when they step to only 5′ away?

  • Sending paper to a journal while proposing its shortening right away

  • Trying again for 526R6 – Lego bag with large 5 then box under with 526R6 under it

  • What happens if the initial damage from the Feeblemind spell reduces the target to 0 HP (or kills them)?

  • Are my house rules good to make it easier to run away from combat in 5E?

  • Find Unique Anagrams

  • How would one protect one self from a suit while skiing?

  • tax filing obligations for class action settlement income of under 10$ (non-resident alien)

  • Novel about a microscopic civilization living inside the Sun

  • “played the violin as/like my brother did”

  • Is an autopilot failure an emergency?

  • What is a “pickle switch” in civil aviation?

more hot questions

Question feed

Your privacy

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Сумма цифр трехзначного числа

Вводится трехзначное число. Написать программу, которая вычисляет сумму его цифр.
Решение задачи на языке программирования Python

Например, если было введено 349, программа должна вывести на экран число 16, так как

3 + 4 + 9 = 16.

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

Как извлечь отдельные цифры из числа? Если число разделить нацело на десять, в остатке будет последняя цифра этого числа. Например, если 349 разделить нацело на 10, то получится частное 34 и остаток 9. Если потом 34 разделить также, получится частное 3 и остаток 4; далее при делении 3 на 10 получим частное 0 и остаток 3.

В языках программирования почти всегда есть две операции:

1) нахождение целого при делении нацело,

2) нахождение остатка при делении нацело.

В языке программирования Python первая операция обозначается // (двумя знаками деления), а вторая – % (знаком процента). Например:

>>> 34 // 10
3
>>> 34 % 10
4

Примечание. Операции деления нацело и нахождения остатка с точки зрения арифметики применимы только к целым числам. Но в Python их можно использовать и по отношению к дробным числам:

>>> 34.5 % 10
4.5
>>> 34.5 // 10
3.0
>>> 34.5 // 12.9
2.0

Алгоритм нахождения суммы цифр трехзначного числа abc (где a – сотни, b – десятки и c – единицы) можно описать так:

  1. Найти остаток от деления abc на 10, записать его в переменную d1. Это будет цифра c.
  2. Избавиться от цифры c в числе abc, разделив его нацело на 10.
  3. Найти остаток от деления ab на 10, записать его в переменную d2. Это будет цифра b.
  4. Избавиться от цифры b в числе ab, разделив его нацело на 10.
  5. Число a однозначное. Это еще одна цифра исходного числа.
  6. Сложить оставшееся число a со значениями переменных d1 и d2.
n = input("Введите трехзначное число: ")
n = int(n)
 
d1 = n % 10
n = n // 10
d2 = n % 10
n = n // 10
 
print("Сумма цифр числа:", n + d2 + d3)

Пример выполнения программы:

Введите трехзначное число: 742
Сумма цифр числа: 13

Однако, если нам известно, что число состоит из трех разрядов (цифр), есть немного другой способ извлечения цифр из числа:

  1. Остаток от деления на 10 исходного числа дает последнюю цифру числа.
  2. Если найти остаток от деления на 100 исходного числа, то мы получи последние две цифры числа. Далее следует разделить полученное двухзначное число нацело на 10, и у нас окажется вторая цифра числа.
  3. Если исходное трехзначное число разделить нацело на 100, то получится первая цифра числа.
n = input("Введите трехзначное число: ")
n = int(n)
 
d1 = n % 10
d2 = n % 100 // 10
d3 = n // 100
 
print("Сумма цифр числа:", d1 + d2 + d3)

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

n = input("Введите трехзначное число: ")
 
# Извлекается первый[0] символ строки, 
# преобразуется к целому.
# Аналогично второй[1] и третий[2].
a = int(n[0])
b = int(n[1])
c = int(n[2])
 
print("Сумма цифр числа:", a + b + c)

Задача может быть усложнена тем, что число вводится не пользователем с клавиатуры, а должно быть сгенерировано случайно. Причем обязательно трехзначное число.

В этом случае надо воспользоваться функциями randint(), randrange() или random() из модуля random. Первым двум функциям передаются диапазоны: randint(100, 999), randrange(100, 1000). Получить трехзначное число, используя random() немного сложнее:

# Функция random генерирует
# случайное дробное число от 0 до 1
from random import random
 
# При умножении на 900 получается случайное
# число от 0 до 899.(9).
# Если прибавить 100, то получится
# от 100 до 999.(9).
n = random() * 900 + 100
 
# Отбрасывается дробная часть, 
# число выводится на экран
n = int(n)
print(n)
 
# Извлекается старший разряд числа
# путем деления нацело на 100
a = n // 100
 
# Деление нацело на 10 удаляет 
# последнюю цифру числа.
# Затем нахождение остатка при 
# делении на 10 извлекает последнюю цифру,
# которая в исходном числе была средней.
b = (n // 10) % 10
 
# Младший разряд числа находится
# как остаток при делении нацело на 10.
c = n % 10
 
print(a+b+c)

Больше задач в PDF

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