
Напишите программу, которая переводит целое число (возможно, отрицательное) из двоичной системы
счисления в восьмеричную. Перед отрицательными числами ставится знак "-". Переводить число в десятичную систему не разрешается. Входные данные Входная строка содержит двоичную запись целого числа N Выходные данные Программа должна вывести восьмеричную запись введённого числа.

Ответы на вопрос

Видимо, для кодирования отрицательных чисел используется прямой код: записывается минус и затем просто двоичное представление модуля числа.
Алгоритм перевода: разбиваем двоичные цифры на группы по 3 (начиная справа) и переводим каждую группу отдельно.
Код (Python 3):
N = input()
sign = ""
if N[0] == "-":
sign = "-"
N = N[1:]
oct_reversed = ""
while len(N) > 0:
N, last_triplet = N[:-3], N[-3:]
oct_digit = 0
while len(last_triplet) > 0:
oct_digit *= 2
if last_triplet[-1] == "1":
oct_digit += 1
last_triplet = last_triplet[:-1]
oct_reversed += str(oct_digit)
oct = sign + oct_reversed[::-1]
print(oct)
Пример ввода:
-1110010
Пример вывода:
-132



Для перевода целого числа из двоичной системы счисления в восьмеричную, вам нужно выполнить следующие шаги:
1. Прочитайте входную строку, представляющую двоичное число.
2. Определите, является ли число положительным или отрицательным, и сохраните эту информацию.
3. Если число отрицательное, удалите знак "-" и сохраните его для будущей обработки.
4. Преобразуйте двоичное число в восьмеричное, разбив его на группы по три цифры справа налево и преобразовывая каждую группу в восьмеричную форму.
5. Объедините восьмеричные группы, добавив знак "-" обратно, если число было отрицательным.
Давайте реализуем эту программу на Python:
```python # Функция для перевода двоичной группы в восьмеричную def binary_to_octal(binary_group): octal_group = 0 power = 0 for digit in binary_group[::-1]: octal_group += int(digit) * (2 ** power) power += 1 return octal_group
# Ввод двоичного числа binary_number = input("Введите двоичное число: ")
# Проверка на отрицательное число is_negative = False if binary_number[0] == "-": is_negative = True binary_number = binary_number[1:]
# Дополните двоичное число нулями слева до кратности трём while len(binary_number) % 3 != 0: binary_number = "0" + binary_number
octal_result = "" i = 0
# Преобразование двоичных групп в восьмеричные и их объединение while i < len(binary_number): binary_group = binary_number[i:i + 3] octal_group = binary_to_octal(binary_group) octal_result += str(octal_group) i += 3
# Вывод результата с учетом знака if is_negative: octal_result = "-" + octal_result
print("Восьмеричная запись:", octal_result) ```
Эта программа сначала преобразует двоичное число в восьмеричное, разбив его на группы по три бита и преобразуя их в восьмеричную форму. Затем программа объединяет восьмеричные группы и добавляет знак "-" обратно, если исходное число было отрицательным.


Похожие вопросы
Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili