Число как последовательность (список) цифр
В позиционной системе счисления число фактически представляет собой список цифр. Для получения такого списка и работы с ним в системе Mathematica предусмотрено несколько встроенных функций, наиболее важными из которых являются IntegerDigits, DigitCount, RealDigits и FromDigits.
Представление целого числа в виде списка десятичных цифр: функция IntegerDigits
Разговаривая по телефону, иногда приходится передавать какие-нибудь длинные, например двадцатизначные, числа. В этих случаях обычно читают их цифра за цифрой. Число 587999888735555 читают, например, часто так: пять, восемь, семь, девять, девять, девять, восемь, восемь, восемь, семь, три, пять, пять, пять, пять. В программах тоже иногда нужно по числу определить его цифры. Если вы хотите узнать, является ли шестизначное число счастливым, вам придется сравнить сумму первых трех цифр с суммой последних трех. Поэтому не удивительно, что уже в версии 2 системы Mathematica была предусмотрена функция IntegerDigits, которая представляет число в виде списка цифр. Представим, например, число 25! в виде списка цифр.
IntegerDigits[
25
!]
{
1.5.5.1.1.2.1.0.0.4.3.3.3.0.9.8.5.9.8.4.0.0.0.0.0.0
}
Представление целого числа в виде списка цифр в системе счисления с произвольным основанием: функция IntegerDigits
Но, оказывается, функция IntegerDigits может использоваться также для получения списка цифр в системе счисления, основание которой нужно указать вторым параметром. Основание в таком случае может быть любым натуральным числом, большим единицы. Представим, например, число 60! (я полагаю, оно бы очень понравилось шумерам, если бы они его знали) в их любимой шестидесятеричной системе.
IntegerDigits[
60
!,
60
]
{
1.20.3.4.48.29.10.11.46.47.21.26.45.46.9.29.47.16.37.50.59
.
58.0.33.59.19.31.10.42.35.8.9.36.0.0.0.0.0.0.0.0.0.0.0.0.0.0
}
Иногда нужно представить число в системе счисления не только с заданным основанием, но и с заданным количеством цифр, т.е. дополнить его ведущими нулями в таком количестве, чтобы количество цифр равнялось заданному. Тогда количество цифр в числе нужно задать в качестве третьего параметра функции IntegerDigits.
Вот как число 56 представляется в виде байта.
IntegerDigits[
56
,
2
,
8
]
{
0.0.1.1.1.0.0.0
}
А вот как число 25! записывается в 32-разрядных машинах.
IntegerDigits[
25
!,
2.32
]
{
0.1.1.1.1.0.1.1.1.1.0.0.0.0.0.0.0.0.0.0.0.0
.
0.0.0.0.0.0.0.0.0.0
}