Во всех задачах этого листка ввод-вывод стандартный.
В системе счисления с основанием больше 10, цифры записываются так: 0, 1, 2, ..., 9, A, B, C, ...
В тексте программ на языке Python можно использовать целочисленные константы,
записанные в двоичной (префикс 0b
), восьмеричной (префикс 0o
)
и шестнадцатеричной (префикс 0x
) системах счисления.
После указанного префикса идут цифры, которые в двоичной системе счисления
могут быть только 0 или 1, в восьмеричной — от 0 до 7,
в шестнадцатеричной — от 0 до 9, а также буквы
латинского алфавита от A до F (могут быть как строчными, так и заглавными).
Например, десятичной число 179 можно задать несколькими способами.
A = 179 A = 0b10110011 A = 0o263 A = 0xB3
Если вы знаете стандартные функции языка Python для перевода
представления чисел между различными системами счисления, то этими
функциями пользоваться нельзя. Также нельзя использовать функции
типа eval
, exec
и т.д.
Если программа выводит результат в системе счисления с основанием больше 10, то цифры записываются так: 0, 1, 2, ..., 9, A, B, C, ...
Упражнения
01: Шестнадцатеричная цифра - 1
Дана шестнадцатеричная цифра, которую необходимо считать
в величину типа str
. Выведите ее десятичное значение.
Программа должна содержать функцию перевода hex2int(c).
Аргумент функции имеет тип str
, результат — int
.
Ввод | Вывод |
---|---|
9 |
9 |
F |
15 |
02: Шестнадцатеричная цифра - 2
Решите задачу, обратную предыдущей.
Ввод | Вывод |
---|---|
9 |
9 |
15 |
F |
03: Из двоичной в десятичную
Дано число, записанное в двоичной системе счисления.
Переведите его в тип int и выведите на экран в десятичном виде.
Исходное число необходимо считать в переменную типа string,
для перевода реализовать функцию bin2int(s).
Аргумент функции имеет тип str
, результат — int
.
Ввод | Вывод |
---|---|
10110011 |
179 |
04: Из шестнадцатеричной в десятичную
Решите предыдущую задачу в случае, когда входное число задано в шестнадцатеричном
виде. Соответствующая функция должна называться hex2int(s).
Аргумент функции имеет тип str
, результат — int
.
Ввод | Вывод |
---|---|
B3 |
179 |
05: Из десятичной в двоичную
Переведите число из десятичной системы в двоичную.
Соответствующая функция должна называться int2bin(n).
Аргумент функции — число типа int
,
результат имеет тип str
.
Ввод | Вывод |
---|---|
179 |
10110011 |
06: Из десятичной в шестнадцатеричную
Переведите число из десятичной системы в шестнадцатеричную. Соответствующая функция должна называться int2hex(n).
Ввод | Вывод |
---|---|
179 |
B3 |
07: Из любой в любую
Напишите программу, переводящую запись числа между двумя произвольными системами счисления.
На вход программа получает три величины: n, A, k, где n и k – натуральные числа от 2 до 36: основания системы счисления, A – число, записанное в в системе счисления с основанием n, A<231.
Необходимо вывести значение A в системе счисления с основанием k без лидирующих нулей.
Ввод | Вывод |
---|---|
2 |
2F |
10 |
Z |
Указание. Напишите две функции перевода — из числа в произвольной системе счисления, записанного в переменной типа str в переменную типа int и обратно.
08: Из шестнадцатеричной в двоичную
Переведите число из шестнадцатеричной системы счисления в двоичную. Исходное число может быть очень большим (до 2×105 символов). Необходимо вывести результат без лидирующих нулей.
Ввод | Вывод |
---|---|
2F |
101111 |
09: Из двоичной в шестнадцатеричную
Переведите число из двоичной системы счисления в шестнадцатеричную. Исходное число может быть очень большим (до 1,2×106 символов).
Ввод | Вывод |
---|---|
101111 |
2F |
10: Из уравновешенной троичной в десятичную
В уравновешенной троичной системе счисления используется основание 3 и три цифры: 0, 1 и -1. Цифру -1 будем обозначать знаком $. Достоинство уравновешенной троичной системы счисления: простота хранения отрицательных чисел и удобство нахождения числа, противоположному данному.
Вот как записываются небольшие числа в уравновешенной троичной системе счисления:
Десятичная | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Уравнов. троичная | $00 | $01 | $1$ | $10 | $11 | $$ | $0 | $1 | $ | 0 | 1 | 1$ | 10 | 11 | 1$$ | 1$0 | 1$1 | 10$ | 100 |
Подробней о уравновешенной троичной системе счисления можно прочитать в Википедии (статья Троичная система счисления, там используется термин "троичная симметричная система счисления") а также в этой статье.
Дана запись числа в уравновешенной троичной системе счисления. Переведите его в десятичную. Исходное число может быть очень большим (до 105).
Ввод | Вывод |
---|---|
$01 |
-8 |
11: Из фибоначчиевой в десятичную
Рассмотрим последовательность Фибоначчи: F1=1, F2=2, Fn=Fn-1+Fn-2 при n>2. В частности, F3=2, F4=3, F5=5, F6=8 и т.д.
Любое натуральное число можно представить в виде суммы нескольких членов последовательности Фибоначчи. Такое представление будет неоднозначным, но если наложить дополнительное условие, что в представлении нет двух соседних членов последовательности Фибоначчи, то представление становится единственным.
Будем говорить, что число A представимо в фибоначчиевой системе счисления в виде akak-1...a1, где ai∈{0;1}, если A=akFk+...+a1F1 и в записи akak-1...a1 нет двух единиц подряд.
Вот как записываются небольшие числа в фибоначчиевой системе счисления:
Десятичная | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Фибоначчиева | 0 | 1 | 10 | 100 | 101 | 1000 | 1001 | 1010 | 10000 | 10001 | 10010 | 10100 | 10101 | 100000 |
Подробней о фибоначчиевой системе счисления можно прочитать в Википедии (статья Фибоначчиева система счисления).
Дана запись числа в фибоначчиевой системе счисления. Запишите его в десятичной системе счисления.
Программа получает на вход строку из символов 0 и 1 и должна вывести одно целое число. Гарантируется, что результат может принимать значения от 0 до 2·109.
Ввод | Вывод |
---|---|
10101 |
12 |
12: Из десятичной в уравновешенную троичную
Дано целое число oт -2·109 до 2·109. Выведите его представление в уравновешенной троичной системе счисления без лидирующих нулей.
Ввод | Вывод |
---|---|
-8 |
$01 |
13: Из десятичной в фибоначчиеву
Дано целое число oт 0 до 2·109. Выведите его представление в фибоначчиевой системе счисления без лидирующих нулей.
Ввод | Вывод |
---|---|
12 |
10101 |
14: Инкремент
Первая строка входных данных содержит последовательность символов '0', ..., '9', 'A', ..., 'Z', являющейся записью некоторого неотрицательного числа в системе счисления с основанием base. Длина числа не превосходит 100000 символов. Вторая строка входных данных содержит основание системы счисления base, не превосходящее 36.
Увеличьте это число на 1 и выведите результат в той же системе счисления.
Ввод | Вывод |
---|---|
19A |
1A0 |
15: Декремент
Первая строка входных данных содержит последовательность символов '0', ..., '9', 'A', ..., 'Z', являющейся записью некоторого положительного числа в системе счисления с основанием base. Длина числа не превосходит 100000 символов. Вторая строка входных данных содержит основание системы счисления base, не превосходящее 36.
Уменьшите это число на 1 и выведите результат в той же системе счисления.
Ввод | Вывод |
---|---|
1A0 |
19A |
16: Инкремент в уравновешенной троичной системе счисления
Дана запись некоторого числа в уравновешенной троичной системе счисления, длина записи не превосходит 100000 символов.
Увеличьте это число на 1 и выведите его значение в той же системе.
Ввод | Вывод |
---|---|
$01 |
$1$ |
17: Декремент в уравновешенной троичной системе счисления
Уменьшите на 1 длинное число, записанное в уравновешенной троичной системе счисления.
Ввод | Вывод |
---|---|
$1$ |
$01 |
18: Фибоначчиев инкремент
Дано целое неотрицательное число n, записанное в фибоначчиевой системе счисления, длина числа не превосходят 100000 символов. Выведите значение числа n+1 в фибоначчиевой системе счисления.
Ввод | Вывод |
---|---|
100101 |
101000 |
19: Фибоначчиев декремент
Дано целое положительное число n, записанное в фибоначчиевой системе счисления, длина числа не превосходят 100000 символов. Выведите значение числа n-1 в фибоначчиевой системе счисления.
Ввод | Вывод |
---|---|
101000 |
100101 |
20: Шестнадцатеричная сумма
Дано два шестнадцатеричных числа, длиной до 100000 символов каждый. Вычислите их сумму и выведите результат в шестнадцатеричной системе счисления.
Ввод | Вывод |
---|---|
F1 |
100 |
21: Уравновешенное троичное сложение
Дано два числа, записанных в уравновешенной троичной системе счисления. Выведите их сумму без лидирующих нулей. Длины входных чисел не превосходят 100.000 символов.
Ввод | Вывод |
---|---|
1$$$ |
11 |
Пример соответствует выражению 14+(-10)=4.
22: Фибоначчиево сложение
Даны два числа, записанные в фибоначчиевой системе счисления, длины чисел не превосходят 100.000 символов. Выведите значение их суммы в фибоначчиевой системе счисления.
Ввод | Вывод |
---|---|
10010 |
1000001 |
23: Марсианские факториалы
В 3141 году очередная экспедиция на Марс обнаружила в одной из пещер таинственные знаки. Они однозначно доказывали существование на Марсе разумных существ. Однако смысл этих таинственных знаков долгое время оставался неизвестным. Недавно один из ученых, профессор Очень-Умный, заметил один интересный факт: всего в надписях, составленных из этих знаков, встречается ровно K различных символов. Более того, все надписи заканчиваются на длинную последовательность одних и тех же символов.
Вывод, который сделал из своих наблюдений профессор, потряс всех ученых Земли. Он предположил, что эти надписи являются записями факториалов различных натуральных чисел в системе счисления с основанием K. А символы в конце — это конечно же нули — ведь, как известно, факториалы больших чисел заканчиваются большим количеством нулей. Например, в нашей десятичной системе счисления факториалы заканчиваются на нули, начиная с 5!=1×2×3×4×5. А у числа 100! в конце следует 24 нуля в десятичной системе счисления и 48 нулей в системе счисления с основанием 6 — так что у предположения профессора есть разумные основания!
Теперь ученым срочно нужна программа, которая по заданным числам N и K найдет количество нулей в конце записи в системе счисления с основанием K числа N!, чтобы они могли проверить свою гипотезу. Вам придется написать им такую программу!
В первой строке входных данных содержатся числа N и K, разделенные пробелом, (1≤N≤109, 2≤K≤1000). Выведите число X — количество нулей в конце записи числа N! в системе счисления с основанием K.
Ввод | Вывод |
---|---|
5 10 | 1 |
100 10 | 24 |
100 6 | 48 |
3 10 | 0 |
24: Счастливые цифры
Школьнику Васе нравятся числа, которые заканчиваются счастливыми для него цифрами k. Поэтому каждый раз, когда он видит какое-нибудь натуральное число n, он сразу пытается подобрать такое d (d≥2), что число n в системе счисления с основанием d заканчивается как можно большим количеством цифр k.
Требуется написать программу, которая по заданным числам n и k найдет такое d, чтобы число n в системе счисления с основанием d заканчивалось как можно большим количеством цифр k.
Вводятся два целых десятичных числа n и k (1≤n≤1011, 0≤k≤9).
Выведите два числа: d — искомое основание системы счисления и l — количество цифр k, которым заканчивается запись числа n в этой системе счисления. Если искомых d несколько, выведите любое из них, не превосходящее 1012 (такое всегда существует).
Ввод | Вывод |
---|---|
49 1 | 3 2 |
7 5 | 3 0 |