我想要一个像
这样的功能string getAlphabetEncoding(num){
//some logic
return strForNum;
}
输入:1输出:a,输入:5输出:e,输入:27输出:aa,输入:676输出:YZ,输入:677输出:za ...
答案 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;