2015-10-07 15 views
-2

我要像我們如何編寫一個最佳函數來獲得給定數字的字母順序?

string getAlphabetEncoding(num){ 
    //some logic 
    return strForNum; 
} 

輸入的函數:1輸出:一個,輸入:5輸出:即,輸入:27輸出:AA,輸入:676輸出:YZ,輸入:677輸出:ZA ..

+1

的JavaScript,Java和PHP? –

+0

http://stackoverflow.com/help/how-to-ask –

+1

@Tushar:這是電子表格程序(如Excel)標記列的方式。前26個數字用單字母名稱表示,接下來的26x26數字用兩個字母的名稱表示,等等。 –

回答

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
<div id=data></div>

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 
+0

「Bijective base」 - 「今天學到了新東西,謝謝。 –

相關問題