Добавлен BaHeK,
опубликован
Решил написать небольшую статью про сэйв системы. Самые популярные основывабтся на записи всех данных некоторым методом в одно большое число и переводе его в систему счисления с большим основанием. Рассмотрим две системы: www.thehelper.net/threads/save-load-code-yet-another.41354 и www.thehelper.net/threads/bigint.145156/#post-1261803.
Распишу немного о принципе работы.
В 1 случае все числа записываются в одну строку друг за другом, разделяя разные числа дефисом. Получается число в 11 значной системе счисления.
Во случае 2 есть значения, которые надо сохранить, и максимально возможные. Результат сначала умножают на максимальное значение + 1 и прибавляется для сохранения.
В итоге эти числа переводятся в другие сс.
В 1 случае все числа записываются в одну строку друг за другом, разделяя разные числа дефисом. Получается число в 11 значной системе счисления.
Во случае 2 есть значения, которые надо сохранить, и максимально возможные. Результат сначала умножают на максимальное значение + 1 и прибавляется для сохранения.
В итоге эти числа переводятся в другие сс.
Я немного изменил алгоритм из первой системы так чтобы он работал как во второй. Собственно вся суть в следушем куске кода:
set m = 0
set i = 0
loop
set j = 0
loop
set a[j] = a[j] * (maxs[i] + 1)
set j = j + 1
exitwhen j > m
endloop
set a[0] = a[0] + vals[i]
set j = 0
loop
set k = a[j] / BASE
set a[j] = a[j] - k * BASE
set a[j + 1] = a[j + 1] + k
set j = j + 1
exitwhen j > m
endloop
if k > 0 then
set m = m + 1
endif
set i = i + 1
exitwhen i >= l
endloop
Здесь BASE это длина кодирующего алфавита, vals - сохраняемые числа, maxs - максимальные значения.
Итоговые цифры числа в новой сс сохраняются в массиве a.
Итоговые цифры числа в новой сс сохраняются в массиве a.
Для загрузки искользуется код. Загруженные значения записываются в vals.
По аналогии с предидущим кодом в a цифры большого числа.
По аналогии с предидущим кодом в a цифры большого числа.
set i = l - 1
loop
exitwhen i < 0
set j = m
loop
exitwhen j <= 0
set k = a[j] / (maxs[i] + 1)
set a[j - 1] = a[j - 1] + (a[j] - k * (maxs[i] + 1)) * BASE
set a[j] = k
set j = j - 1
endloop
set k = a[j] / (maxs[i] + 1)
set vals[i] = a[j] - k * (maxs[i] + 1)
set a[j] = k
if a[m] == 0 then
set m = m - 1
endif
set i = i - 1
endloop
Всё это работает по принципу сложения, умножения и деления столбиком.
Также хочу сказать, что это не готовая система, а только её основа.
Также хочу сказать, что это не готовая система, а только её основа.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Комментарии пока отсутcтвуют.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.