UniLecs #Task. Positional systems
Задача: дано число N в десятичной системе счисления. Необходимо представить его во всех системах счисления от 2-ичной до 16-ричной.
Входные данные: единственное целое число N.
Вывод: “система счисления» — «представление числа N в этой системе счисления”
Пример:
N = 151
Output:
2–10010111
3–12121
4–2113
5–1101
6–411
7–304
8–227
9–177
10–151
11–128
12–107
13 — B8
14 — AB
15 — A1
16–97
Разбор
В решении СС — система счисления. Для перевода чисел десятичной СС в число любой СС последовательно выполняют деление нацело на основание СС, пока не получат ноль. Числа, которые возникают как остаток от деления на основание СС, представляют собой последовательную запись разрядов числа в выбранной СС от младшего разряда к старшему. Поэтому для записи самого числа остатки от деления записывают в обратном порядке.
Например, переведём десятичное число 13 в двоичную систему счисления. Рассмотренную выше последовательность действий (алгоритм перевода) можно изобразить так:
При переводе в 11-ричную и выше СС используют буквы латинского алфавита, заменяя остатки от деления буквами. Например, 10 — А, 11 — B, 12 — C, … 15 — F. Переведём десятичное число 158 в шестнадцатеричную систему счисления.
Для решения изначальной задачи необходимо просто реализовать вышеописанный алгоритм. Для удобства можно создать такую строку: s = “0123456789ABCDEF”, где индекс каждого элемента соответствует числу или букве, на которую нужно заменить остаток от деления. Например, s[15] = “F”, в 16-ричной СС мы заменяем 15 на букву F.
Далее мы просто берем остаток от деления числа n на основание СС, добавляем его к ответу, делим n без остатка на основание СС и делаем так, пока число n > 0. В конце нужно не забыть вывести развернутый ответ.
Реализация
https://gist.github.com/unilecs/4e900e12526d6246095d144c7551be2a