Перевод из факториальной в десятичную: Урок информатики по теме «Нетрадиционные системы счисления»

Содержание

Аксиоматические основы функций подстановки… — Научная электронная библиотека

СОДЕРЖАНИЕ

Введение

Часть 1. Аксиоматические основы функций подстановки в системе счисления ряда факториальных множеств

1. Непозиционные и позиционные системы счисления
2. Перевод целых чисел из одной позиционной системы счисления в другую
3. Системы счисления и теория множеств
3.1. Множества и десятичная система счисления
3.2. Позиционный метод формирования множеств
3.3. Теоремы о числе элементов позиционных множеств
3.4. Основные характеристики позиционных систем счисления
4. Аксиоматические основы подстановок ряда факториальных множеств
4.1. Подстановки (перестановки), факториал, ряд факториальных множеств
4.2. Система определений ряда факториальных множеств
4.3. Проблема нумерации элементов ряда факториальных множеств
4.4. Структура, определения и теоремы ряда факториальных множеств
4.5. Распределение теорем по факториальным множествам и их структурные характеристики
5. Система счисления ряда факториальных множеств
5.1. Принципы и этапы формирования системы счисления ряда факториальных множеств
5.2. Правила построения системы счисления ряда факториальных множеств
6. Алгоритмы преобразования элементов множества из десятичной системы счисления в систему счисления ряда факториальных множеств и обратно
6.1. Преобразования элементов множества из десятичной системы счисления в систему счисления ряда факториальных множеств
6.2. Преобразования элементов множества из системы счисления ряда факториальных множеств в десятичную систему счисления
6.3. Теоремы преобразования чисел
7. Система счисления ряда факториальных множеств и реализация подстановок
7.1. Метод последовательного циклического сдвига элементов факториальных множеств
7.2. Алгоритм формирования множества числовых значений циклических сдвигов
8. Системы счисления рядов упорядоченных множеств

Часть 2. Характеристики функций подстановки в системе счисления ряда факториальных множеств

9. Общие характеристики подстановок ряда факториальных множеств
9.1. Независимые циклы и их количество
9.2. Декремент подстановки
9.3. Инверсия подстановки
9.4. Четность подстановки
9.5. Знак подстановки
9.6. Постановка задачи исследования для одиночных подстановок с наилучшими характеристиками
10. Состав и характеристики подстановок факториальных множеств Ф1 и Ф2
11. Состав и характеристики подстановок факториального множества Ф3
11.1. Количество независимых циклов подстановок множества Ф3
11.2. Декремент подстановок множества Ф3
11.3. Инверсия подстановок множества Ф3
11.4. Количество независимых циклов и декремент подстановок множества Ф3
11.5. Декремент и инверсия подстановок множества Ф3
11.6. Количество независимых циклов, декремент и инверсия множества Ф3
12. Состав и характеристики подстановок множества Ф4
12.1. Количество независимых циклов множества Ф4
12.2. Декремент подстановки множества Ф4
12.3. Инверсия подстановок множества Ф4
12. 4. Количество независимых циклов и декремент подстановок множества Ф4
12.5. Декремент и инверсия подстановок множества Ф4
12.6. Количество независимых циклов, декремент и инверсия множества Ф4
13. Состав и характеристики подстановок множества Ф5
13.1. Количество независимых циклов множества Ф5
13.2. Декремент подстановок множества Ф5
13.3. Инверсия подстановок множества Ф5
13.4. Количество независимых циклов и декремент подстановок множества Ф5
13.5. Декремент и инверсия подстановок множества Ф5
13.6. Количество независимых циклов, декремент и инверсия подстановок множества Ф5
14. Характеристики подстановок произвольного факториального множества. Критерии выбора одиночных подстановок с наилучшими характеристиками
14.1. Количество независимых циклов подстановок
14.2. Декремент подстановок
14.3. Количество независимых циклов и декремент подстановок
14.4. Инверсия подстановок
14.5. Критерии выбора одиночных подстановок с наилучшими характеристиками
15. Статистические данные количества независимых циклов подстановок и их анализ
15.1. Статистические данные количества независимых циклов подстановок
15.2. Последовательный алгоритм формирования значений количества независимых циклов и их числа в целом и по диапазонам факториального множества Ф5
15.3. Результаты анализа статистических данных количества независимых циклов
16. Статистические данные декремента подстановок и их анализ
16.1. Статистические данные декремента подстановок
16.2. Последовательный алгоритм формирования значений декремента и их числа в целом и по диапазонам множества Ф5
16.3. Результаты анализа статистических данных декремента
17. Статистические данные инверсии подстановок и их анализ
17.1. Статистические данные инверсии подстановок
17.2. Последовательный алгоритм формирования значений инверсии и их числа в целом и по диапазонам множества Ф5
17.3. Результаты анализа статистических данных инверсии
18. Аксиоматическое построение подстановок ряда факториальных множеств
Список литературы

Приложение 1. История возникновения и преобразования чисел

П1.1. Числа в математике и нашей жизни
П1.2. Устный счет
П1.3. Римская система записи чисел
П1.4. Счет у первобытных народов
П1.5. Числа ацтеков в Мексике в XI–XVI вв
П1.6. Египетская нумерация
П1.7. Алфавитные нумерации
П.1.7.1. Греческое алфавитное изображение чисел
П.1.7.2. Алфавитная нумерация Древней Руси
П1.8. Позиционные системы
П1.8.1. Клинописная запись чисел Древнего Вавилона
П1.8.2. Цифры индейцев племени майя
Список литературы к приложению 1

Приложение 2. Общие аксиоматические понятия, определения и построения

4.6. Смешанные позиционные системы счисления. Факториальная система

Важным обобщением позиционных систем с постоянным основанием являются смешанные системы, где основания меняются от разряда к разряду. Обозначим основания разрядов с номерами 0, 1, …, k через р0, р1, . .., рk. Тогда запись вида Аp=k…210 означает представление в смешанной системе счисления величины kр(k-1) … p1р0 + …+ 2p1р0 + 1р0 + 0. Каждый коэффициент i удовлетворяет неравенcтву: 0  i

pi . Наиболее известным примером смешанной системы счисления является общепринятая система измерения времени: «секунды – минуты – часы – сутки – недели – годы», основаниями в которой являются числа р0 = 60, р1 = 60, р2 = 24, р3 = 7, р4 =52.

Проще всего осуществить такой перевод последовательным делением числа и его частных на основания р0, р1, …, рk . Остатки от деления на каждом шаге и самое последнее частное в итоге образуют искомую запись числа в смешанной системе.

Пример 1. Выразим временной период А = 1 526 840 секунд в общепринятой системе измерения времени «сек — мин — ч — сут. — нед. — — годы», где

р0 = 60, р1 = 60, р2 = 24, р3 = 7, р4 =52.

Решение. 1526840 60

15268202544760

20 25440 424 24

7 408 177

16 142

3.

Рассматривая в обратном порядке остатки от деления на каждом шаге и самое последнее частное, получим искомую запись числа:

А =43210=2/3/16/07/20 = 2 недели 3 дня 16 часов 7 минут 20 секунд.

Обратный перевод из смешанной системы в десятичную осуществляют посредством умножения каждого символа k на сомножитель, представляющий собой произведение рkр(k–1)∙∙∙p1р0, с последующим суммированием полученных произведений.

С точки зрения практического применения в комбинаторных задачах из смешанных систем счисления для представления целых чисел наиболее важна факториальная, где стоимость каждого разряда с номером i равна i!. При этом основание разряда равно pi = i + 1.

Запись k∙∙∙210. в факториальной системе обозначает число Аф =kk! +…+2 2!+ 11!+0. Поскольку в математике принято соглашение 0! = 1, то в факториальной системе всегда задается 0 =0. Правила перевода из десятичной системы счисления в факториальную и обратно аналогичны правилам для всех смешанных систем.

Пример 2. Перевести в факториальную систему счисления число А = 62710.

Решение

627 1

627 6272

0 6263133

1 3121044

1 104265

0 255

1

Ответ: Искомое представление числа в факториальной системе имеет вид: А ф = 510110.

Обратный перевод выполняется следующим образом:

А = 55! + 14! + 0  3! + 12! + 1 1! =5120 + 124 + 12 + 11 = = 600 + 24 + 2 + 1 = 62710.

Факториальная запись чисел удобна для подсчета вариантов множеств, состоящих из взаимно отличных друг от друга объектов.

Задачи

1. Перевести в двоичную систему числа:

а) 105210, б) 0,96510, в) 31,5310, г) 159,6610

.

2. Перевести в десятичную систему числа:

а) 11001102, б) 0,00102, в) 10101,0112, г) 110,01012.

3. Доказать, что в n – мерном кубе Вn :

а) количество вершин в сфере радиусом 1 равно n, а количество вершин в шаре радиусом 1 равно n + 1;

б) количество вершин в сфере радиусом 2 равно (n – 1)/2, а количество вершин в шаре радиусом 2 равно n(n+1)/2+1.

4. Доказать (например, с использованием метода математической индукции), что общее количество вершин в бинарном дереве Тn равно 2n+1 1.

5. Доказать методом математической индукции, что в

n-мерном кубе Вn число ребер равно n2n–1 .

6. Доказать, что на множестве всех n-мерных булевых векторов расстояние Хэмминга удовлетворяет неравенству треугольника:

 (n, n) +  ( n, n)   (n, n),

гдеn, n, n — любые векторы из bn .

7. Пусть Вn — множество всех n – мерных двоичных векторов bn, которые появляются случайно c одинаковой вероятностью. Доказать, что средневероятный вес 

св(b n) булевых векторовbn равен n/2.

8. Перевести в двоичную систему и систему с основанием 4 числа B23DA16, АD7С16.

9. Перевести в десятичную систему числа F9B8316, CАF516.

10.Перевести в шестнадцатеричную систему числа 1101102 , 11011012 , 10110110101012 .

11.Перевести, используя сокращенные правила перевода, из восьмеричной системы в двоичную числа 57168, 1738 , 2658 .

12. Перевести следующие дроби в десятичную систему:

а) 0,168, б) 0,213, в) 0,436, г) 0,57.

13. Выполнить следующие арифметические действия:

а) 120211013 – 2100122313 , 74358139 – 5250489 ;

б) 101111012  11012 , A4D316 C5A16 ;

в) 5362 7 : 657 , 67516 8 : 478 .

14. Перевести в факториальную систему числа:

а) 17210, б) 93410, в) 21578, г) 15356.

15. Перевести в десятичную систему из факториальной числа: а) 423010, б) 231200, в) 142110, г) 502110.

код гольфа — Преобразование непорядкового числа в десятичное (и обратно)

Задавать вопрос

спросил

2 года, 4 месяца назад

Изменено 2 года, 4 месяца назад

Просмотрено 3к раз

\$\начало группы\$ 90$$

$$(-1000)+(300)+(-30)+(7)$$

Таким образом, \$1337_{-10}\$ равно \$-723_{10}\$ в десятичная дробь. (Интересным последствием этого является то, что отрицательные знаки не нужны в непорядковых числах; любое целое число может быть представлено как /[0-9]+/ . )

В этом задании ваша оценка равна сумме длин двух программ. или функции:

  • Один, чтобы преобразовать число из недесятичного в десятичное
  • Один для преобразования числа из десятичной системы в отрицательную

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

Тестовые примеры

Негадация в десятичную:

 1337 -> -723
0 -> 0
30 -> -30
101 -> 101
12345 -> 8265
 

От десятичного до отрицательного:

 -723 -> 1337
0 -> 0
1 -> 1
21 -> 181
-300 -> 1700
1000 -> 19000
-38493 -> 179507
 
  • код-гольф
  • номер
  • базовое преобразование

\$\конечная группа\$

14

\$\начало группы\$

От Неги до Деки

 Т(ö
 

Попробуйте онлайн!

Дека в Нега

 Т(в
 

Попробуйте онлайн!

\$\конечная группа\$

2

\$\начало группы\$

 f=(p,e=n=>n&&(i=(n%10+10)%10)-p*e((n-i)/p))=>e
ф(10)
f(-10)
 

Попробуйте онлайн! f определяет вспомогательную функцию. f(10) возвращает функцию, которая преобразует непорядковые числа в десятичные, а f(-10) возвращает функцию, преобразующую десятичные числа в отрицательные.

\$\конечная группа\$

1

\$\начало группы\$

Преобразование из негадального десятичного числа в десятичное (25 байт)

 f=n=>n&&n%10-10*f(n/10|0)
 

Попробуйте онлайн!

Как?

Это довольно просто. Мы рекурсивно вычисляем:

$$f(n) = \cases{ 0, п=0\\ (n \bmod 10) — 10\times f\left(\left\lfloor\dfrac{n}{10}\right\rfloor\right), n>0}$$

Десятичное число в отрицательное (55 байт)

 f=(n,i=n%10,k=n>0?-n:~n-i+(i+=10))=>n?f(k/10|0)+i%10:''
 

Попробуйте онлайн!

Как?

В JS результат оператора % имеет тот же знак, что и делимое. Например, -17 % 10 — это -7 , а не 3 (как в Python), что нам и хотелось бы здесь получить. Возможный обходной путь:

 (n % 10 + 10) % 10
 

Кроме того, нам также нужно вычислить \$\left\lfloor n/-10\right\rfloor\$ с положительным или отрицательным значением \$n\$. Это можно сделать с помощью:

 Math.floor(n/-10)
 

, но это выражение немного длинное.

Вместо того, чтобы рассматривать обе проблемы по отдельности, мы явно проверяем знак \$n\$ и вычисляем переменные i и k соответственно:

  • Мы безоговорочно устанавливаем i = n % 10 .
  • Если \$n>0\$, мы определяем k = -n и оставляем i без изменений.
  • Если \$n\le 0\$, мы определяем k = ~n + 10 и добавляем \$10\$ к i . Обе операции объединены в k = ~n - i + (i += 10) .

Затем мы можем использовать k / 10 | 0 и i % 10 в обоих случаях.

\$\конечная группа\$

7

\$\начало группы\$

От отрицательного до десятичного:

 ḅ-10
 

Попробуйте онлайн!

От десятичного до отрицательного

 b-10
 

Попробуйте онлайн!

Ввод в виде целого числа, вывод в виде списка цифр. +2 байта (+1 к каждому) для ввода/вывода в виде целых чисел

\$\конечная группа\$

\$\начало группы\$

Из недесятеричной:

 #~FromDigits~-10&
 

Попробуйте онлайн!

Простое базовое преобразование строки или списка цифр.

В обратном порядке:

 f@0=0
f@a_:=f@-⌊a/10⌋||a~Mod~10
 

Попробуйте онлайн!

Выводит список цифр, включая начальный ноль, завернутый в или .

+1 байт для вывода в виде целого числа: Попробуйте онлайн!

\$\конечная группа\$

\$\начало группы\$

 (по определению m(X Y)(rem(+(rem X Y)Y)Y))
(defun n(N)(if(== N 0)0(-(m N 10)(*(n(этаж(/ N 10)))10))))
(defun d(N)(if(== N 0)0(+(m N 10)(*(d(ceil(/ N -10)))10))))
 

n вычисляет десятичную дробь, учитывая отрицательную запятую. d вычисляет обратное.

Обе функции принимают и возвращают обычное целое число.

Функция Erlang rem работает как в JavaScript, а не как в Python, поэтому m функция необходима. Я экономлю несколько байтов за счет повторного использования — если бы это были две отдельные задачи, они были бы встроенными, поскольку каждая функция использует их только один раз.

Редактировать: изменены некоторые вызовы функций, чтобы сэкономить пару байтов без изменения логики

\$\конечная группа\$

\$\начало группы\$

От недесятичного до десятичного

 [ 0 [ поменять местами 10 * - ] уменьшить ]
 

Попробуйте онлайн!

Принимает массив недесятичных цифр и возвращает целое число.

 [
  0 [ ... ] уменьшить ! Уменьшить по цифрам с начальным значением 0...
    обмен 10 * - ! (accum digit -- accum') Вычислить accum * -10 + цифра
]
 

Десятично-недесятичный

 [[dup 0 = не] [-10 2dup/потолок -rot rem] произвести]
 

Попробуйте онлайн!

Принимает целое число и возвращает массив недесятичных цифр в обратном порядке. Не производит начальных нулей, что означает, что ввод 0 дает пустой массив.

 [
  [конд] [петля] производить! Начиная со значения n, цикл, пока cond не даст false
                              ! и собираем верхние значения во время цикла
    дубликат 0 = нет! Cond: остановить, если top равен 0
                              ! Цикл: получить последнюю цифру и сохранить большее значение
    -10 2дуп/потолок! ( n -- n -10 сохранить ) сохранить = ceil(n/-10)
    -рот рем ! (сохранить доходность) доходность = n%-10 (неотрицательный мод)
]
 

\$\конечная группа\$

\$\начало группы\$

Преобразование от недесятичного до десятичного, 4 байта

 B_10
 

Попробуйте онлайн!

ввод в виде списка цифр, вывод в виде целого числа.

От десятичного до отрицательного, 4 байта

 B_10
 

Попробуйте онлайн!

ввод в виде целого числа, вывод в виде списка цифр.

\$\конечная группа\$

\$\начало группы\$

Преобразование из негадального числа в десятичное, 10 байт

 {у+х*-10}/
 

Попробуйте онлайн!

Десятичное число в отрицательное, 30 байт

-8 байт благодаря coltim!

 {$[~x;0;(10*o@-_-x%-10)+10!x]}
 

Попробуйте онлайн!

\$\конечная группа\$

7

\$\начало группы\$

От негадального до десятичного,

32 31 байт

Сохранен байт благодаря xnor!!!

 f=лямбда n:n и~9*f(n/10)+n%10
 

Попробуйте онлайн!

Десятичное число в непорядковое,

42 35 34 байта

Сохранено 7 байт благодаря att!!!
Сохранен еще один байт благодаря xnor!!!

 г=лямбда n:n и n%10+10*g(0-n/10)
 

Попробуйте онлайн!

\$\конечная группа\$

5

\$\начало группы\$

Преобразование из негадального числа в десятичное, 39 байт

 (λ(x)(foldl(λ(a b)(+(* -10 b)a))0 x))
 

Попробуйте онлайн!

Принимает массив недесятичных цифр и возвращает целое число.

От десятичного до отрицательного, 67 байт

 (define(d x)(if(= 0 x)0(+(modulo x 10)(*(d(ceiling(/ x -10)))10))))
 

Попробуйте онлайн!

Принимает ввод как целое число и возвращает целое число.

\$\конечная группа\$

\$\начало группы\$

Относительно десятичной дроби

 _.:\(0)(_-10*_)
 

Попробуйте оба онлайн!

Принимает ввод как перевернутый список цифр.

Это довольно просто — умножьте первую цифру на -10, добавьте к ней вторую цифру, умножьте ее на -10 и так далее.

От десятичного до отрицательного

 Seq.unfold(_){x=>val m=(x%10+10)%10;Option.when(x*x>0)(m->(m-x)/10) }:+0
 

Возвращает перевернутый список цифр с ведущим нулем (в конце).

Это не так уж и тривиально. Из-за того, как Scala % работает, мы не можем просто использовать x%10 , так как он поддерживает знак x , а не 10 . 10 нужно добавить к x%10 , чтобы убедиться, что оно положительное, а затем %10 сделать снова.

\$\конечная группа\$

\$\начало группы\$

 {×₁₀ʰ↔-}ˡ
 

Попробуйте онлайн!

 ≜{×₁₀ʰ↔-}ˡ
 

Попробуйте онлайн!

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

 { }ˡ Сгиб влево над входными отрицательными цифрами:
 × умножить
    ʰ аккумулятор
  ₁₀ на 10,
     ↔- вычесть его из следующей цифры.
≜ Попробуйте вывести все целые числа, пока не
 {×₁₀ʰ↔-}ˡ — это непорядковое представление входных данных.
 

\$\конечная группа\$

\$\начало группы\$

От отрицательного до десятичного, 28 байт

 f(n){n=n?n%10-10*f(n/10):0;}
 

Попробуйте онлайн!

Десятичное число в непорядковое,

48 45 43 байта

Сохранено 3 байта благодаря xnor!!!
Сохранено 2 байта благодаря rtpax!!!

 g(n){n=n?n%~9+10*(g(n/~9+(n=n%~9<0))+n):0;}
 

Попробуйте онлайн!

\$\конечная группа\$

0

\$\начало группы\$

Комбинированный код negadec_to_dec и dec_to_negadec благодаря пользователю и вдохновлен ответом Нила

 b=функция(p)d=функция(x)`if`(x,(y=x%%10)-p*d((x-y)/p),0)
б(10)
б(-10)
 

Попробуйте онлайн!


Отдельные функции

Негадецимально к десятичным

 d=function(x)`if`(x,x%%10-10*d(x%/%10),0)
 

Попробуйте онлайн!

от десятичной до отрицательной (47 байт):

 d=функция(x)`if`(x,(y=x%%10)+10*d((y-x)/10),0)
 

Попробуйте онлайн!

\$\конечная группа\$

4

\$\начало группы\$

От нуля до десятичной:

 I↨S±χ
 

Попробуйте онлайн! Ссылка на подробную версию кода. Это просто пользовательское базовое преобразование с базой -10 .

От десятичной до двоичной:

 NθP0Wθ« ←I﹪θχ≔±÷θχθ
 

Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:

 Nθ
 

Введите десятичное число.

 P0
 

Напечатайте 0 , если ввод равен нулю.

 Wθ«
 

Повторяйте, пока ввод не станет равным нулю.

 ←I﹪θχ
 

Напечатать следующую цифру справа налево.

 ≔±÷θχθ
 

Разделите ввод на 10 и измените его знак. (К сожалению, это не то же самое, что разделить ввод на 9.0029 -10 .

\$\конечная группа\$

\$\начало группы\$


-1 байт благодаря Bubbler

 ->x{x.reduce{_2-_1*10}}
 

Попробуйте онлайн!

TIO использует более старую версию Ruby, а в Ruby 2.7 мы пронумеровали параметры, что экономит 3 байта.


 f=->x,s=''{x!=0?f[-~~(x/10),"#{x%10}"+s]:s}
 

Попробуйте онлайн!

\$\конечная группа\$

3

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie

.

р - Как решить проблему с десятичными числами в факториальной функции?

спросил

Изменено 2 года, 10 месяцев назад

Просмотрено 121 раз

Часть коллектива R Language Collective

Я пишу код функции факториала. Мой код выглядит следующим образом:

 f <- функция(n) {
  факториал <- 1
  если ( п < 0 )
    print("Факториал отрицательных чисел невозможен")
  иначе если ( n == 0 )
    print("Факториал 0 равен 1")
  еще {
    для (я в 1: п)
      факториал <- факториал * я
    print(paste("Факториал от ",n," равен ",factorial))
  }
}
 

Моя проблема с этим кодом связана с вводом десятичных чисел. Например, для f(6.5) мой код вычисляет 720, но мы знаем 6.5! не существует. Для десятичных чисел, таких как 6.5, 5/2 или sqrt(2) Я хотел бы видеть сообщение типа

 "Факториал для этого числа не существует".
 

Как исправить эту проблему в моем коде?

  • r
  • десятичный
  • факторный

1

Что-то вроде этого? Это останавливается, если n и as.integer(n) не идентичны.

 f <- функция (n) {
 если (as.integer(n)!= n) {
 stop("Факториал для этого числа не существует")
 }
 факториал <- 1
 если ( п < 0 )
 print("Факториал отрицательных чисел невозможен")
 иначе если ( n == 0 )
 print("Факториал 0 равен 1")
 еще {
 для (я в 1: п)
 факториал <- факториал * я
 print(paste("Факториал от ",n," равен ",factorial))
 }
}
ф(5)
# [1] "Факториал 5 равен 120"
f(6,5)
# Ошибка в f(6.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *