数字转换成字母
a=>1;b=>2;.aa=>27等等
这个问题的本质是进制转换,进制转换的原理是
aaaa = 1×26^3 + 1×26^2 + 1×26^1 + 1×26^0 = 18279
abcd = 1×26^3 + 2×26^2 + 3×26^1 + 4×26^0 = 19010
这可以得到字母转换成数字的公式。首先得到字母字符串的长度n,然后单个字符串转换成数字(1-26)。
如abcdef,可知n=6,转换:
1. a×26^(n-1) + b×26^(n-2) + c×26^(n-3) + d×26^(n-4) + e×26^(n-5) + f×26^(n-6)
2. 1×26^(5) + 2×26^(4) + 3×26^(3) + 4×26^(2) + 5×26^(1) + 6×26^(0)
根据这个可以反推出数字转换成字母的计算过程(通过取余去实现,注意余数m为0时要将其重置为26,因为0对应的字母为z),给任意大于0的自然数x有:
const number_to_word = (x) => {
let s = "";
while (x > 0) {
let m = x % 26;
m = m === 0 ? (m = 26) : m;
s = String.fromCharCode(96 + parseInt(m)) + s;
x = (x - m) / 26;
}
return s;
});
};