所以我有一种情况,我会得到一个数字(介于1 - 1000之间),需要将其转换为字符串,如下所示:
1 = A
2 = B
3 = C
...
25 = Y
26 = Z
27 = AA
28 = AB
...
52 = AZ
53 = BA
54 = BB
55 = BC
...
78 = BZ
79 = CA
80 = CB
...
702 = ZZ
703 = AAA
到目前为止,我有这个,但我得到了错误的答案:
count_to_string = function(count) {
var div = Math.floor(count/26);
var rem = count % 26;
ll = '';
if (div > 0) ll = ll + String.fromCharCode('A'.charCodeAt() + (div-1));
return ll + String.fromCharCode('A'.charCodeAt() + (rem-1));
};
使用输入26运行输出:A @
答案 0 :(得分:2)
如果只想返回字符串,可以在增加字符串连接时使用循环。此方法没有限制:
function countToString(count){
var arr = [];
while(count >> 0 > 0){
arr.unshift(String.fromCharCode(65 + --count % 26));
count /= 26
}
return arr.join("")
}
[1,2,3,25,26,27,28,52,53,54,55,78,79,80,702,703,99999,6e6].forEach(function(num){
document.write(num + " = " + countToString(num) + "<br>")
})
&#13;
答案 1 :(得分:1)
我认为这会帮助你而不是Math.floor,因为回答问题并且截断只会让你得到你想要的东西
var div = Math.trunc(count/26);
答案 2 :(得分:1)
您有rem-1
而不是rem
。以下是修复和输出的代码:
var count_to_string = function(count) {
var div = Math.floor(count/26);
var rem = count % 26;
ll = '';
if (div > 0) ll = ll + String.fromCharCode('A'.charCodeAt() + (div-1));
return ll + String.fromCharCode('A'.charCodeAt() + (rem)); //Here is the fix
};
for (var i = 0; i < 58; i++) {
console.log(count_to_string(i));
}
输出是:
A
B
C
D
E
...
V
W
X
Y
Z
AA
AB
AC
...
AZ
BA
BB
BC
BD
BE
BF
答案 3 :(得分:0)
第一个建议是先计算余数,然后在计算quocient之前减去它的数量。这样做除法总是准确的,并且由于四舍五入你不会得到任何错误。换句话说,将函数的前两行更改为:
var rem = count % 26;
var div = Math.floor((count-rem)/26);
我认为这可能有助于避免错误,但我会尝试考虑别的事情,然后编辑这个答案。