まずは整数をベクトル表記に変換します。
1: 25129925999 3: 25129925999
. 2: 10
1: [11, 10, 9, ..., 1, 0]
.
25129925999 RET 10 RET 12 RET v x 12 RET -
1: 25129925999 1: [0, 2, 25, 251, 2512, ... ]
2: [100000000000, ... ] .
.
V M ^ s 1 V M \
(思い出してください。\ コマンドは整数商を計算します。)
1: [0, 2, 5, 1, 2, 9, 9, 2, 5, 9, 9, 9]
.
10 V M % s 2
次にこの数をインクリメントしなければなりません。 これは最下位桁に 1 を加えて、かつ繰上り処理を伴います。 ある桁が 9 で、かつその右の全ての桁が 9 ならその桁より左に 繰上りが発生します。
1: [0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1] 1: [1, 1, 1, 0, 0, 1, ... ]
. .
9 V M a = v v
1: [1, 1, 1, 0, 0, 0, ... ] 1: [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]
. .
V U * v v 1 |
1 と 0 のベクトルに * を蓄積作用させると、1 の最初の連続だけが残ります。
(訳注: 蓄積作用は左から右に作用するので、
この前後にリスト反転 v v を入れている。)
最右桁を除き、1 が残った桁全てに繰上りが発生します。
右端に 1 を連結するのは、
繰上りフラグ 1 を繰上り先の桁に位置させ、右端に1を加える処理のためです。
2: [0, 0, 0, 0, ... ] 1: [0, 0, 2, 5, 1, 2, 9, 9, 2, 6, 0, 0, 0]
1: [0, 0, 2, 5, ... ] .
.
0 r 2 | V M + 10 V M %
ここで、元の数の 左 に 0 を連結しました。 これは、繰上りが発生した桁から 1 桁繰上ることを見越しての操作です。
最後に、このリストを整数に変換します。
3: [0, 0, 2, 5, ... ] 2: [0, 0, 2, 5, ... ]
2: 1000000000000 1: [1000000000000, 100000000000, ... ]
1: [100000000000, ... ] .
.
10 RET 12 ^ r 1 |
1: [0, 0, 20000000000, 5000000000, ... ] 1: 25129926000
. .
V M * V R +
最終ステップの別の方法としては、 `10 $$ + $' を桁ベクトルにまとめ作用させる方法があります。
1: [0, 0, 2, 5, ... ] 1: 25129926000
. .
V R ' 10 $$ + $ RET
Go to the first, previous, next, last section, table of contents.
利用度数