БлогNot. Как преобразовать систему счисления без переворачивания строки цифр?

Как преобразовать систему счисления без переворачивания строки цифр?

Везде в примерах строка переворачивается. Дело в том, что "естественный" способ перевода чисел между системами счисления (как на бумажке, с делением и выписыванием остатков) даёт цифры в обратном порядке, и их надо переставлять от последнего символа к первому (инвертировать строку).

Проблему легко решить с помощью рекурсии, сразу дающей нужный порядок цифр, вот пример кода:

#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 просмотра]


теги: c++ числа алгоритм

К этой статье пока нет комментариев, Ваш будет первым