我需要一个类似于这里解释的功能......
JS function for writing out a word, binary counter style
...但是使用基数7(或其他)来生成(计数)从A到G的字母 像这样......
---a
---b
---c
---d
---e
---f
---g
--aa
--ab
--ac
--ad
--ae
--af
etc. up to gggg
有没有一种简单的方法可以改变其中一种功能来实现这一目标?
P.S。这很酷......
他们用了......
var iterations = Math.pow(2,str.length)
and Math.pow(string.length,2)
它们都有效但只是因为字符串长度是4而基数是2 无意中纠正了
i.e 4^2=16 2^4=16
如果使用任何其他字符串长度,则其中一个会出错。
i.e. 2^10=1024 10^2=100
答案 0 :(得分:1)
也许这是第一次开始:Working Demo
它基本上只需要一个数字并将其转换为基数为7的数字:
var map = 'abcdefg';
var n = 13
var out = '';
if(n == 0) out = map.charAt(0) + out;
while (n > 0) {
out = map.charAt(n % 7) + out;
n = Math.floor(n / 7);
}
// gives "bg" for 13
这意味着维持十进制系统中的正常计数器并转换每个数字。
请注意,由于aa
映射到a
,此系统中的0
不会退出。
答案 1 :(得分:1)
function change_num(num,base) {
var lets = 'abcdefghijklmnopqrstuvwxyz';
lets = lets.split('');
if (num / base < 1) {
return lets[num];
}
if (num / (Math.pow(base,2)) < 1) {
return lets[Math.floor(num/base)] + lets[(num % base)];
}
if (num / (Math.pow(base,3)) < 1) {
var numreturn;
numreturn = lets[Math.floor(num/(Math.pow(base,2)))];
numreturn += lets[Math.floor((num%Math.pow(base,2))/base)];
numreturn += lets[(num % base)];
return numreturn;
}
if (num / (Math.pow(base,4)) < 1) {
var numreturn;
numreturn = lets[Math.floor(num/Math.pow(base,3))];
numreturn += lets[Math.floor(num%Math.pow(base,3)/(Math.pow(base,2)))];
numreturn += lets[Math.floor((num%Math.pow(base,2))/base)];
numreturn += lets[(num % base)];
return numreturn;
}
if (num / (Math.pow(base,5)) < 1) {
var numreturn;
numreturn = lets[Math.floor(num/Math.pow(base,4))];
numreturn += lets[Math.floor(num%Math.pow(base,4)/(Math.pow(base,3)))];
numreturn += lets[Math.floor(num%Math.pow(base,3)/(Math.pow(base,2)))];
numreturn += lets[Math.floor((num%Math.pow(base,2))/base)];
numreturn += lets[(num % base)];
return numreturn;
}
}
适用于任何基地。不能写一个递归函数,所以这很难,你可以推断我在做什么。