【问题标题】:function for writing out a base 7 word, like binary counter style写出基数 7 字的函数,如二进制计数器样式
【发布时间】:2010-11-25 11:18:38
【问题描述】:

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

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  

是否有一种简单的方法可以更改其中一个功能来实现这一点?

附言这很酷...
他们用...

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   

【问题讨论】:

  • 这不是base 7,那是base 8 没有0。
  • 我实际上是想弄清楚应该用什么基数来称呼它,所以我想了一个简单的例子……基数 2 是字母 a 和 b。使用相同的推理... 7 个字母 abcdefg 将是基数 7
  • 除了你还有-,变成8
  • 嗯...不,我又想到了这个。在链接的页面中,他们使用了字长 4 abcd 和 - 连字符......它仍然是基数 2,而不是 5。我的单词 abcdefg 中的字母数量实际上与基数无关。重要的是占位符或模式,你现在能看到吗?

标签: javascript binary


【解决方案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

【讨论】:

  • 谢谢...我得到了 2 个很好的答案,我将对其进行测试并尝试让它们满足我的需要。
  • 这是我想做的,只是我想不通怎么做。 :D
【解决方案2】:
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;
    }

}

适用于任何基地。懒得写递归函数,所以用了很辛苦的方法,你大概可以推断出我在做什么。

【讨论】:

  • 是的......谢谢,我必须研究一段时间才能完全理解发生了什么:-)
猜你喜欢
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多