我们如何编写一个最优函数来获得给定数字的字母顺序?

时间:2015-10-07 05:50:33

标签: javascript java php algorithm functional-programming

我想要一个像

这样的功能
string getAlphabetEncoding(num){
    //some logic
    return strForNum;
}

输入:1输出:a,输入:5输出:e,输入:27输出:aa,输入:676输出:YZ,输入:677输出:za ...

2 个答案:

答案 0 :(得分:2)

我认为您正在尝试从Base 10转换为Bijective Base 26(电子表格列表示法),也称为hexavigesimal系统。

您将JavaScript列为感兴趣的语言,因此我将其定位。下面的代码执行转换,但请注意,输出不是您在问题中建议的。我已经使用我的电子表格程序对它们进行了验证,发现它们是正确的,所以我假设我们问题中的值是错误的。

Number.prototype.toBijectiveBase26 = (function () {
  return function toBijectiveBase26() {
    n = this
    ret = "";
    while(parseInt(n)>0){
      --n;
      ret += String.fromCharCode("A".charCodeAt(0)+(n%26));
      n/=26;
    }
    return ret.split("").reverse().join("");
  };
}());

Number(1).toBijectiveBase26();   //Returns A
Number(5).toBijectiveBase26();   //Returns E
Number(27).toBijectiveBase26();  //Returns AA
Number(676).toBijectiveBase26(); //Returns YZ
Number(677).toBijectiveBase26(); //Returns ZA

答案 1 :(得分:1)

尝试一下:



var ABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

function getNameFromNumber(num) {
  var numeric = (num - 1) % 26;
  var letter = ABC[numeric];
  var num2 = parseInt((num - 1) / 26);
  if (num2 > 0) {
    return getNameFromNumber(num2) + '' + letter;
  } else {
    return letter;
  }
}

var data = document.getElementById('data');
data.innerHTML += 1 + ' ->  ' + getNameFromNumber(1) + '<br>'; //A
data.innerHTML += 5 + ' ->  ' + getNameFromNumber(5) + '<br>'; //E
data.innerHTML += 27 + ' ->  ' + getNameFromNumber(27) + '<br>'; //AA
data.innerHTML += 676 + ' ->  ' + getNameFromNumber(676) + '<br>'; //YZ
data.innerHTML += 677 + ' ->  ' + getNameFromNumber(677) + '<br>'; //ZA
&#13;
<div id=data></div>
&#13;
&#13;
&#13;