我正在处理 Codewars Ruby 问题,但不明白我看到的错误。以下是说明:
用阶乘编码十进制数是一种在依赖阶乘而不是数字幂的基础系统中写出数字的方法。在此系统中,最后一位数字始终为 0,并且以 0 为基数!之前的数字是 0 或 1,并且以 1 为基数!之前的数字是 0、1 或 2,并且以 2 为基数!更一般地,倒数第 n 个数字始终为 0、1、2、... 或 n,并且以 n! 为基数。
示例:十进制数 463 编码为“341010”
因为 463(以 10 为底)= 3×5!+ 4×4!+ 1×3!+ 0×2!+ 1×1!+ 0×0!
如果我们仅限于数字 0...9,我们可以编码的最大数字是 10!- 1。
所以我们用字母 A 到 Z 扩展 0..9。有了这 36 个数字,我们最多可以编码 36 个!− 1 = 37199332678990121746799944815083519999999910(基数为 10)
我们编写了两个函数,第一个将编写一个十进制数并返回一个具有阶乘表示的字符串:“dec2FactString(nb)”
第二个将解码具有阶乘表示的字符串并生成十进制表示:“factString2Dec(str)”。
给定的数字将是正数。
笔记
您可以希望在 Clojure、Python、Ruby、Haskel 中使用大整数进行测试,但不能使用 Java 和其他“dec2FactString(nb)”中的数字“nb”至多很长的东西。
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 变量就可以解决这个问题,但我看到的是一致的“字符串不能被强制转换为 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 `
'