Codewars Ruby の問題に取り組んでいますが、表示されているエラーがわかりません。手順は次のとおりです。
階乗による 10 進数のコーディングは、階乗ではなく階乗に依存する基本システムで数値を書き出す方法です。このシステムでは、最後の桁は常に 0 で、基数は 0 です。その前の数字は 0 または 1 で、基数は 1! です。その前の数字は 0、1、または 2 のいずれかで、基数は 2 です。より一般的には、最後から n 番目の数字は常に 0、1、2、...、または n であり、基数は n! です。
例:10 進数の 463 は「341010」とコーディングされます。
なぜなら 463 (基数 10) = 3×5! +4×4!+1×3!+0×2!+1×1!+0×0!
数字 0 ~ 9 に制限されている場合、コード化できる最大の数字は 10 です。- 1.
したがって、0..9 を A から Z の文字で拡張します。これらの 36 桁を使用して、最大 36 までコード化できます。− 1 = 37199332678990121746799944815083519999999910 (基数 10)
2 つの関数をコーディングします。最初の関数は 10 進数をコーディングし、階乗表現の文字列を返します: "dec2FactString(nb)"
2 つ目は階乗表現で文字列をデコードし、10 進数表現を生成します: "factString2Dec(str)"。
与えられた数値は正になります。
ノート
Clojure、Python、Ruby、Haskel では Big Integer を使用したテストを期待できますが、「dec2FactString(nb)」の数値「nb」が最大長である Java などでは期待できません。
def dec2FactString(nb)
if nb <= 0 then
num = 1
else
num = (nb * dec2FactString(nb - 1))
end
return num
end
この方法は問題の前半に過ぎないことに注意してください。このコードは、このテストを使用すると Fixnum として正しい階乗を返す限り、機能しているように見えます。
Test.assert_equals(dec2FactString(4), "24")
命令は文字列を要求するので、通常は ".to_s" を num 変数に追加するだけで問題ないと思いますが、代わりに一貫した "String can't be coerced into Fixnum (TypeError)" が表示されます。 " エラーメッセージ。出力を配列にプッシュしてそこから印刷しようとしましたが、同じエラーが発生しました。
私はFixnumを少し読んで、Fixnumを文字列に追加するという点でエラーが機能しないことを理解していますが、この場合はそうしていないと思います-Fixnum出力を変換したいだけです文字列に。何か不足していますか?
観察 - このコードは壊れて、その下にエラーが発生します。
def dec2FactString(nb)
if nb <= 0 then
num = 1
else
num = (nb * dec2FactString(nb - 1))
end
return num.to_s
end
Example from description
`*': String can't be coerced into Fixnum (TypeError)
from `dec2FactString'
from `dec2FactString'
from `dec2FactString'
from `dec2FactString'
from `block in
'
from `block in describe'
from `measure'
from `describe'
from `
'