Я искал математику за преобразование из любой базы в любую базу. Это больше о подтверждении моих результатов, чем о чем-либо. Я нашел то, что кажется моим ответом на mathforum.org, но я все еще не уверен, правильно ли я это понял. У меня есть преобразование из большей базы в меньшую базу, хорошо, потому что это просто взять первую цифру умножить на базу, вы хотите добавить следующую цифру повтора. Моя проблема возникает при преобразовании из меньшей базы в большую базу. При этом они говорят о том, как вам нужно преобразовать большую базу, которую вы хотите, в меньшую базу, которая у вас есть. Примером может быть переход от базы 4 к базе 6, вам нужно преобразовать число 6 в базу 4, получая 12. Затем вы просто делаете то же самое, что и при преобразовании из большого в маленькое. Трудность, с которой я сталкиваюсь, заключается в том, что вам нужно знать, какое число находится в другой базе. Так что мне нужно было бы знать, что 6 находится в базе 4. Это создает большую проблему в моей голове, потому что тогда мне понадобится стол. Кто-нибудь знает способ сделать это лучше.
Я думал, что базовое преобразование поможет, но я не могу найти такую работу. И с сайта, который я нашел, кажется, что он позволяет вам конвертировать из базы в базу, не проходя через базу 10, но сначала вам нужно знать, как конвертировать первое число из базы в базу. Это делает это бессмысленно.
Комментаторы говорят, что я должен быть в состоянии преобразовать письмо в число. Если так, то я это уже знаю. Это не моя проблема, однако. Моя проблема в том, чтобы преобразовать большую базу в маленькую, мне нужно сначала преобразовать имеющееся у меня базовое число в желаемое. При этом я побеждаю цель, потому что, если у меня есть возможность конвертировать эти базы в другие базы, я уже решил свою проблему.
Изменить: я выяснил, как преобразовать из баз меньше или равно 10 в другие базы меньше или равно 10. Я также могу перейти от базы больше 10 на любую базу, которая меньше или равна 10. Проблема начинается при преобразовании из базы больше 10 в другую базу больше 10. Или из базы меньше 10 в базу больше 10. Мне не нужен код, мне просто нужна базовая математика, которая может быть применяется к коду.
string
и возвращаетint
), и алгоритм, который принимает число и возвращает его представление в данной базе.Ответы:
Мне кажется, это очень простой вопрос, так что извините, если я вас немного читаю. Самый важный момент, который вы должны изучить, состоит в том, что число не является его цифровым представлением . Число - это абстрактный математический объект, в то время как его цифровое представление - это конкретная вещь, а именно последовательность символов на бумаге (или последовательность битов в вычислительной памяти, или последовательность звуков, которые вы издаете при передаче числа). Что вас смущает, так это то, что вы никогда не видите число, а всегда его цифровое представление. Таким образом, вы в конечном итоге думаете, что число является представлением.
Следовательно, правильный вопрос, который нужно задать, - это не «как преобразовать из одной базы в другую», а «как узнать, какое число представлено данной строкой цифр» и «как найти цифровое представление данный номер ".
Итак, давайте создадим две функции в Python: одну для преобразования числового представления в число, а другую для обратного. Примечание: когда мы запускаем функцию, Python, конечно, выводит на экран число, которое он получил в базе 10. Но это не означает, что компьютер хранит цифры в базе 10 (это не так). Это не имеет значения , как компьютер представляет собой число.
Давайте проверим это:
Вооружившись функциями преобразования, ваша проблема решается легко:
Тест:
Примечание: мы не прошли через представление базы 10! Мы преобразовали представление базы в число, а затем число в базу c . Номер был не в каком представлении. (На самом деле, компьютер должен был каким-то образом представлять его, и он представлял его с помощью электрических сигналов и прикольных вещей, которые происходят в микросхемах, но, конечно, это были не нули, а 1).б с
источник
fromDigits
возвращается число в базе 10Я думаю, что лучший способ понять это - это обсуждение с инопланетянином (по крайней мере, в качестве аналогии).
Определение является числом в базе bИкс б означает, что является строкой цифр < b .Икс < б
Примеры Строка цифр 10010011011 - это число в базе 2, строка 68416841531 - это число в базе 10, BADCAFE - это число в базе 16.
Теперь предположим, что я вырос на планете QUUX, где всех учат работать в всю свою жизнь, и я встречаю вас, который привык основывать b . Так ты показываешь мне номер, и что мне делать? Мне нужен способ интерпретировать это:Q б
Определение Я могу интерпретировать число в базе (Примечание: бб б - это число в базе ) по следующей формулеQ
где обозначает пустую строку, а ˉ с d обозначает строку , оканчивающиеся на цифруε s¯d . Посмотритемое доказательство того, что дополнение добавляетвведение в эту запись.d
Так что здесь произошло? Вы дали мне число в базе и я интерпретировал его в базу q без какой-либо странной философии о том, что на самом деле представляют собой числа.б Q
Ключ Ключ к этому - то, что у и + есть функции, которые работают с основанием числа q . Это простые алгоритмы, определенные рекурсивно на основе чисел q (строки цифр).× + Q Q
Это может показаться немного абстрактным, поскольку я использовал переменные, а не фактические числа. Итак, давайте предположим, что вы - существо из базы 13 (используя символы ), а я привык к базе 7 (что гораздо более разумно), используя символы α β γ δ ρ0123456789 XYZ .α βγδρ ζξ
Итак, я увидел ваш алфавит и составил таблицу следующим образом:
Итак, я знаю, что вы работаете в базе , и я знаю, какому числу 7 соответствует любая цифра, которую вы пишете.βξ
Теперь, если мы обсуждали физику, а вы говорили мне о фундаментальных константах (скажем)60 Z8 поэтому мне нужно интерпретировать это:
Итак, я начинаю с умножения но для меня этошкола, я вспоминаю:βζ×βξ
Таблица умножения Quux
так что у меня так далеко
Теперь мне нужно выполнить сложение, используя алгоритм, который был упомянут ранее:
так
источник
Это просто рефакторинг (Python 3) кода Андрея . В кодовых номерах Андрея они представлены в виде списка цифр (скаляров), а в следующих кодовых номерах представлены в виде списка символов, взятых из пользовательской строки :
Чтобы выполнить преобразование из значения в представление в пользовательской базе:
Чтобы выполнить преобразование из представления (в пользовательской базе) в значение:
Для преобразования базы из одной базы в другую:
источник
Фундаментальной операцией базового преобразования является
toDigits()
операция ответа @AndrejBauer. Однако, чтобы сделать это, нет необходимости создавать число во внутреннем представлении чисел, которое в основном представляет собой преобразование из представления в базу 2 и обратно. Вы можете сделать необходимые операции в исходном базовом представлении.Таким образом, первым шагом является выполнение повторяющейся операции деления по модулю.
Поскольку внутренним представлением являются цифры, нужно сделать специальную функцию для проверки нуля
В конце концов, нужно выполнить операцию modulo_div, которая на самом деле является стандартным делением на базу назначения, как мы учились в школе.
просто проверка, чтобы убедиться, что код правильный:
источник
Я знаю простой способ сделать базовое преобразование, которое не требует компьютерной программы. Это путем определения способа преобразования из любой базы в базу 2 и наоборот, а затем покрытия из одной базы в другую базу путем первого преобразования из первой базы в базу 2, а затем преобразования из базы 2 в другую базу. 2 так легко умножить или разделить на любую базу.
Чтобы преобразовать из любой базы в базу 2, все, что вам нужно сделать, это распознать, что для любого числа, если вы возьмете его запись из базы 2 и начнете с 0, а затем для каждой цифры в порядке слева направо, удвойте, если эта цифра равна нулю и вдвое больше, чем 1, если эта цифра равна 1, вы получите сам этот номер. Теперь, учитывая это число в любой базе, вы можете разделить на 2 в этой базе, чтобы получить частное и остаток. Если остаток равен 1, последняя двоичная цифра равна 1, а если остаток равен 0, последняя двоичная цифра равна 0. Разделите снова на 2. Если остаток равен 1, вторая последняя цифра равна 1, а если остаток равен 0, вторая последняя цифра равна 0 и т. Д., Пока вы не получите коэффициент 0.
Чтобы преобразовать из базы 2 в любую базу, все, что вам нужно сделать, это в этой базе, начать с 0, затем для каждой двоичной цифры, идущей слева направо, удвоить в этой базе, если эта цифра равна 0, и удвоить, затем добавить 1 в эту база, если эта цифра 1.
источник
2 is so easy to multiply or divide by in any base.
Я не вижу этого для нечетных оснований, которые больше, чем один из любой степени двух (11 и 13, для начала).Вы можете конвертировать из базы n в базу 10 без какого-либо преобразования в некоторую промежуточную базу.
Например, для преобразования из базы n в базу 9 вы берете алгоритм преобразования в базу 10 и заменяете «10» на «9». То же самое для любой другой базы.
источник