我最近在求职面试中被要求解决一个编程难题,我觉得分享会很有趣.它是关于将Excel列字母转换为实际数字,如果你还记得,Excel用A到Z的字母命名它的列,然后顺序为AA,AB,AC ...... AZ,BA,BB等.
您必须编写一个接受字符串作为参数的函数(如"AABCCE")并返回实际的列号.
解决方案可以使用任何语言.
Jim*_*mmy 36
听起来像标准缩减给我:
蟒蛇:
def excel2num(x):
return reduce(lambda s,a:s*26+ord(a)-ord('A')+1, x, 0)
Run Code Online (Sandbox Code Playgroud)
C#:
int ExcelToNumber(string x) {
return x.Aggregate(0, (s, c) => s * 26 + c - 'A' + 1 );
}
Run Code Online (Sandbox Code Playgroud)
clo*_*orz 16
我在很久以前写过一些Python脚本:
def index_to_int(index):
s = 0
pow = 1
for letter in index[::-1]:
d = int(letter,36) - 9
s += pow * d
pow *= 26
# excel starts column numeration from 1
return s
Run Code Online (Sandbox Code Playgroud)
从STDIN读取列名并打印出相应的数字:
perl -le '$x = $x * 26 - 64 + ord for <> =~ /./g; print $x'
Run Code Online (Sandbox Code Playgroud)
注意事项:假设ASCII.
编辑:替换"为'使您的shell不会$x在字符串中插入.
小智 5
巧合的是我用javascript解决了同样的问题
$(function() { //shorthand document.ready function
var getNumber = function(x) {
var result = 0;
var multiplier = 1;
for ( var i = x.length-1; i >= 0; i--)
{
var value = ((x[i].charCodeAt(0) - "A".charCodeAt(0)) + 1);
result = result + value * multiplier;
multiplier = multiplier * 26;
}
return result;
};
$('#form').on('submit', function(e) { //use on if jQuery 1.7+
e.preventDefault(); //prevent form from submitting
var data = $("#number").val();
$('#answer').text(getNumber(data));
});
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form id="form">
<input type="text" id="number"></input>
<button>submit</button>
</form>
<p id="answer"></p>Run Code Online (Sandbox Code Playgroud)
var getNumber = function(x) {
var result = 0;
var multiplier = 1;
for ( var i = x.length-1; i >= 0; i--)
{
var value = ((x[i].charCodeAt(0) - "A".charCodeAt(0)) + 1);
result = result + value * multiplier;
multiplier = multiplier * 26;
}
return result;
};
Run Code Online (Sandbox Code Playgroud)