如何获得Excel列标题?

时间:2016-09-15 13:52:08

标签: ruby algorithm

我尝试解决代码大战中的一些任务。我必须创建方法,它返回列标题(发生在Excel中)。该方法获得一个参数,即数字。例如:

def get_column_title(n)
//code
end

如果n = 1.它应该返回A.

enter image description here

enter image description here

测试用例:

Test.assert_equals(get_column_title(1), "A")
Test.assert_equals(get_column_title(26), "Z")
Test.assert_equals(get_column_title(52), "AZ")
Test.assert_equals(get_column_title(53), "BA")
Test.assert_equals(get_column_title(702), "ZZ")

我有什么:

  def number_values
    {
      1 => 'A', 2 => 'B', 3 => 'C', 4 => 'D', 5 => 'E', 6 => 'F', 7 => 'G',
      8 => 'H', 9 => 'I', 10 => 'J', 11 => 'K', 12 => 'L', 13 => 'M', 14 => 'N',
      15 => 'O', 16 => 'P', 17 => 'Q', 18 => 'R', 19 => 'S', 20 => 'T',
      21 => 'U', 22 => 'V', 23 => 'W', 24 => 'X', 25 => 'Y', 26 => 'Z'
    }
  end

def translate_values
    if @n <= 26
      number_values[@n-26*0]
    elsif @n <= 52
        'A'+ number_values[@n-26*1]
    elsif @n <= 78
        'B' + number_values[@n-26*2]
    end
end

问题: 我不知道如何在算法上解决这个任务。我想在一个循环中将数字除以26。 你能给我一些提示如何处理这个任务吗?

运动来源: codewars.com

2 个答案:

答案 0 :(得分:1)

您必须将您的号码转换为Base 26并使用A...Z代替0...25。唯一的技巧是在每一步中从你的数字中减去一个。

答案 1 :(得分:1)

{alphabetCount=26
alphabetOffset=1

for i in 0 .. 1000
    i = i + alphabetOffset
    category=""

    while i>alphabetCount do
        j=i%alphabetCount

        if j==0 then
            j=alphabetCount
        end

        category=(64+j).chr + category
        i=(i-j)/alphabetCount

        if j==0 then
            i=i-1
         end
    end

    category=(64+i).chr + category + "\n"
    puts category
end}

抱歉,如果它有点不稳定,但我在移动设备,只能通过在线编译器测试:( 但它输出

0=A
...
25=Z
....
702=AAA