我正在做的一個腳本掃描一個5個字符的代碼,并根據代碼中的字符內容給它分配一個數字。該代碼是一個隨機生成的數字/字母組合。例如7D3B5或HH42B,其中任何位置都可以是(26 10)個字符中的任何一個。
現在,我遇到的問題是,我想根據代碼從1-(36^5)中找出數字。例如:
00000 = 0
00001 = 1
00002 = 2
0000A = 10
0000B = 11
0000Z = 36
00010 = 37
00011 = 38
以此類推,直到最后一個可能的代碼,即:
ZZZZZ = 60466176 (36^5)
我需要的是一個公式來計算,比方說G47DU的數字形式,使用下面的例子。
uj5u.com熱心網友回復:
像這樣嗎?
。function getCount(s){
if (!isNaN(s))
return Number(s)。
return s.charCodeAt(0) - 55。
}
function f(str){
let result = 0;
for (let i=0; i<str.length; i )
result = Math.pow(36, str.length - i - 1) * getCount(str[i])。
return result。
}
var strs = [
'00000'。
'00001'。
'00002'。
'0000A'。
'0000B'。
'0000Z'。
'00010'。
'00011'。
'ZZZZ', '0000Z'.
];
for (str of strs)
console.log(str, f(str));
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
你正試圖創建一個36進制的數字系統。由于有5個 "數字",每個數字從0到Z,數值可以從0到36^5。(如果我們將其與十六進制系統相比較,在十六進制中每個 "數字 "從0到F)。現在要將其轉換為十進制,你可以嘗試使用從十六進制或二進制等系統轉換為十進制系統的相同方法。
它將是這樣的:d4 * (36 ^ 4) d3 * (36 ^ 3) d2 * (36 ^ 2) d1 * (36 ^ 1) d0 * (36 ^ 0) 注:這里的36是符號的總數。
d0、d1、d2、d3、d4的范圍可以是十進制的0到35(重要:不是0到36)。
此外,你可以為任何數量的數字或符號擴展這個系統,你也可以在這個系統中實作加法、減法等運算。(實作這一點將是很有趣的。:) ) 但是,將其轉換為十進制進行運算并將其轉換回來會更容易。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/319983.html
標籤:
