我尝试解决代码大战中的一些任务。我必须创建方法,它返回列标题(发生在Excel中)。该方法获得一个参数,即数字。例如:
def get_column_title(n)
//code
end
如果n = 1.它应该返回A.
测试用例:
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
答案 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