Общий алгоритм преобразования из одних систем счисления в другие

stat2814955

Кто-нибудь может подсказать? Вроде был какой-то одинаковый для преобразования из любой системы в любую, только я забыл

stat2814955

Хотя бы частные... хотя бы почитать что-нить дайте..

vodnik2

Может тебе поможет определения записи в p-ичной системе счисления?
Натуральное число N в p-ичной системе счисления записывается цифрами a_M, ... a_1, a_0 - это по опредлению тоже самое, что
N = \sum_{k=0}^M a_k * p^k.
Обычно, 0 \le a_k < p, но возможны всякие извращения.

_mrz

Кто-нибудь может подсказать? Вроде был какой-то одинаковый для преобразования из любой системы в любую, только я забыл
что тут забывать?
мозг отменили?
берешь и считаешь в лоб, например
есть ли какие-то более эффективные универсальные алгоритмы, помимо расчета в лоб, хз

stat2814955

Хорошо, опиши, как ты будешь переводить число,скажем, 543 из шестнадцатеричной системы в троичную?
Интересует подход, а не на калькулятре посчитать

kiritsev

подсказка - нужно делить нацело и брать остаток от деления.

zuzaka

сначала ты должен перевести это число из 16-ричной числострочки в нормальное число. Делается это по формуле
X = x0 + x1*A1 + x2*A1^2 + x3*A1^3 + ... + xn*A1^n + ...,
где xi - i-ая цифра числа справа, если число записано в A1-ичной системе.
Затем полученное число X ты делишь нацело на A2, где A2 - основание новой системы.
y0 = X mod A2
y1 = (X / A2) mod A2
y3 = (X / A2 / A2) mod A2
...
где слэшем обозначено целочисленное деление
полученные цифры y0, y1, y2, ... выстраиваешь справа налево и получаешь числострочку, соответствующую числу X в системе счисления с основанием A2
Если ты можешь сделать что бы то ни было на калькуляторе, я не понимаю, какие могут возникнуть проблемы с алгоритмизацией.
Есть маза потренироваться в составлении алгоритмов навроде "сварить картошку"

natunchik

сначала ты должен перевести это число из 16-ричной числострочки в нормальное число
А что такое "нормальное число"? int что ли? =)
На самом деле всё так. Если ты переводишь из системы счисления A1 в А2, то нужно уметь
а) считать в системе А2, чтобы записать и посчитать в ней формулу X = x0 + x1*A1 + x2*A1^2 + x3*A1^3 + ... + xn*A1^n + ..., в результате получится то, что нужно. Перевод однозначных (в A1) чисел (цифр то есть) х0, х1, ... в А2 тривиален (можно, например, табличкой).
или
б) уметь считать в системе А1, тогда вычисляешь в ней
y0 = X mod A2
y1 = (X / A2) mod A2
y2 = (X / A2 / A2) mod A2
и опять же переводишь числа y0, y1, ... в цифры А2.
На практике зачастую получается, что выгодней перевести из А1 в двоичку (первым способом а потом из двоички в А2 (вторым способом) - потому что в двоичке мы умеем быстро считать.

kiritsev

А что такое "нормальное число"? int что ли? =)
ну зачем. достаточно просто потребовать чтоб ЭТО можно было делить на основание целевой системы.
можно просто над исходным основанием эту операцию реализовать.
или быстро преобразовать из A1 в A1^N чтоб все операции были быстрее.

stat2814955

мозг отменили?
Есть маза потренироваться в составлении алгоритмов навроде "сварить картошку"

Ну что, никак нельзя без вы.бонов?
За ответы спасибо - всем.
Оставить комментарий
Имя или ник:
Комментарий: