编程之谜:您如何将Excel列名称转换为数字?

Pab*_*dez 46 puzzle algorithm

我最近在求职面试中被要求解决一个编程难题,我觉得分享会很有趣.它是关于将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)


j_r*_*ker 6

从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)

http://jsfiddle.net/M7Xty/1/