UniLecs #Task. Positional systems

Albert Davletov
UniLecs
Published in
2 min readJun 7, 2020

Задача: дано число 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. В конце нужно не забыть вывести развернутый ответ.

Реализация

C#

https://gist.github.com/unilecs/4e900e12526d6246095d144c7551be2a

Play-test:

https://dotnetfiddle.net/eeSlzI

--

--