Как преобразовать систему счисления без переворачивания строки цифр?
Везде в примерах строка переворачивается. Дело в том, что "естественный" способ перевода чисел между системами счисления (как на бумажке, с делением и выписыванием остатков) даёт цифры в обратном порядке, и их надо переставлять от последнего символа к первому (инвертировать строку).
Проблему легко решить с помощью рекурсии, сразу дающей нужный порядок цифр, вот пример кода:
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; void base(unsigned n, unsigned r) { if (n>r-1) base(n/r,r); cout << n%r << " "; } int main(void) { unsigned n=756; base(n,36); cin.sync(); cin.get(); return 0; }
Параметры функции base
- десятичное число и основание системы счисления, в которой его нужно вывести.
Выводимые цифры разделяются пробелами, чтобы видеть и "цифры" систем счисления с основанием выше 10.
Например, 21-я цифра 36-ричной системы счисления так и выведется как "21", а не "L".
Сверить результаты с онлайн-скриптом можно здесь.
15.09.2016, 11:25 [4623 просмотра]