用于写出基本7字的功能,如二进制计数器样式

时间:2010-11-25 02:13:52

标签: javascript binary

我需要一个类似于这里解释的功能......

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   

2 个答案:

答案 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;
    }

}

适用于任何基地。不能写一个递归函数,所以这很难,你可以推断我在做什么。