これを試してください:
入る:
[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 つの文字列の長さ (または整数の倍数) よりも小さい場合、結果は要求したよりも長くなる可能性があります。