最近,我在一次求职面试中被要求解决一个编程难题,我认为分享这个难题会很有趣。这是关于将Excel列字母转换为实际数字,如果你还记得,Excel用字母从A到Z命名它的列,然后顺序是AA,AB,AC……AZ、BA、BB等
您必须编写一个接受字符串作为参数的函数(如"AABCCE"),并返回实际的列数。
解决方案可以是任何语言。
发布于 2009-04-18 17:07:25
我很久以前就为一些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
发布于 2009-06-17 01:04:13
对我来说,这听起来像是标准的缩减:
Python:
def excel2num(x):
return reduce(lambda s,a:s*26+ord(a)-ord('A')+1, x, 0)
C#:
int ExcelToNumber(string x) {
return x.Aggregate(0, (s, c) => s * 26 + c - 'A' + 1 );
}
发布于 2013-11-24 07:49:49
巧合的是,我用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));
});
});
<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>
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;
};
https://stackoverflow.com/questions/763691
复制相似问题