我想生成一个字母序列,即“a”、“de”、“gje”等,它们对应于一个数字。前26个非常简单,所以3个返回“c”,26个返回“z”,27个返回“aa”,28个返回“ab”,依此类推。
我不知道该怎么做,这样它就能处理传入的任何数字。所以如果我通过4123,我应该会得到3个字母的组合,因为(26*26*26)允许最多+17000个组合。
有什么建议吗?

最佳答案

class Numeric
  Alph = ("a".."z").to_a
  def alph
    s, q = "", self
    (q, r = (q - 1).divmod(26)); s.prepend(Alph[r]) until q.zero?
    s
  end
end

3.alph
# => "c"
26.alph
# => "z"
27.alph
# => "aa"
4123.alph
# => "fbo"

08-25 08:58