これを試してください:
入る:
[lc1+dsc0nld>b]sb
[sddZdscld>bp]sa
999
12lax
出力:
000000999
入る:
3lax
出力:
999
マクロの終了後、元の番号はスタックに残されます。使用されるレジスタ: a
(マクロ)、b
(マクロ)、c
(カウント)、d
(数字)。
説明:
マクロがセットアップを行い、元の番号をa
呼び出して出力します。b
sd
- 出力する桁数をレジスタに格納するd
dZ
- 元の番号を複製し、その桁数をプッシュします
dsc
- そのカウントを複製し、レジスタに格納しますc
ld>b
- register から必要な数字をロードし、d
それが count より大きい場合はマクロを呼び出しますb
p
- 元の番号を印刷する
マクロb
は、カウントが目的の桁数よりも大きくなるまでゼロを出力します
lc1+
- レジスタからカウントをロードし、c
インクリメントします
dsc
- カウントを複製し、それを保存して登録しますc
0n
- 改行なしでゼロを出力する
ld>b
- register から必要な数字をロードしますd
。それがまだインクリメントされたカウントよりも大きい場合は、ループバックしてマクロb
を再度実行します。そうでない場合は、呼び出し元に戻ります (macro 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
埋め込み文字列は全体として使用されるため、目的の長さの数値が元の文字列の長さよりも大きく、2 つの文字列の長さ (または整数の倍数) よりも小さい場合、結果は要求したよりも長くなる可能性があります。