Попробуйте:
Введите:
[lc1+dsc0nld>b]sb
[sddZdscld>bp]sa
999
12lax
Выход:
000000999
Введите:
3lax
Выход:
999
Исходный номер остается в стеке после окончания макроса. Используемые регистры: a
(макрос), b
(макрос), c
(количество), d
(цифры).
Пояснение:
Macro a
выполняет настройку, вызывает b
и печатает оригинальный номер.
sd
- сохранить количество цифр для вывода в регистр d
dZ
- продублируйте оригинальное число и введите количество цифр
dsc
- продублируйте это количество и сохраните его в регистре c
ld>b
- загрузить нужные цифры из регистра d
, если он больше, чем счетчик, вызвать макрос b
p
- печать оригинального номера
Макрос b
выводит нули до тех пор, пока число не станет больше числа желаемых цифр
lc1+
- загрузить счет из регистра c
и увеличить его
dsc
- продублируйте счет и сохраните его для регистрации c
0n
- вывести ноль без перевода строки
ld>b
- загрузить нужные цифры из регистра d
, если он все еще больше, чем увеличенный счетчик, затем вернуться к циклу, чтобы снова запустить макрос b
, в противном случае он вернется к вызывающей стороне (макрос a
)
Чтобы использовать произвольный ведущий символ:
[lclkZ+dsclknld>b]sb
[sksddZdscld>bp]sa
999 14 [ ] lax
999
[abc] 12 [-] lax
---------abc
В дополнение к другим регистрам он использует k
для хранения символа (который на самом деле может быть больше одного):
[XYZ] 6 [def] lax
defXYZ
8 [ab] lax
abababXYZ
4 [ghjikl] lax
ghijklXYZ
Строки заполнения используются целыми, поэтому результат может быть длиннее, чем вы просили, если желаемый номер длины больше, чем длина исходной строки, но меньше, чем длина двух строк (или целых кратных).