単純に,10 進数一桁を要素とするベクトルを使って,掛け算も,割り算も,自前でやるプログラムを書く。10 進数は,1 の位が添え字 1 になるように(逆順)にすると,プログラムが書きやすい。
途中経過をプリントするのを含めて,余裕の 24 行だ。
n = rep(9, 50)
print(sub("^0*", "", paste(rev(n), collapse="")))
repeat {
if (n[1] %% 2 == 1) {
n = 3 * n
n[1] = n[1] + 1
carry = 0
for (i in seq_along(n)) {
n[i] = n[i] + carry
carry = n[i] %/% 10
n[i] = n[i] %% 10
}
} else {
borrow = 0
for (i in rev(seq_along(n))) {
n[i] = borrow * 10 + n[i]
borrow = n[i] %% 2 == 1
n[i] = n[i] %/% 2
}
}
string = sub("^0*", "", paste(rev(n), collapse=""))
print(string)
if (string == "1") break
}