javascript – 如何创建一个将数字转换为双向Hexavigesimal的函数?

前端之家收集整理的这篇文章主要介绍了javascript – 如何创建一个将数字转换为双向Hexavigesimal的函数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
也许我在数学方面还不够好,但我在将数字转换为纯字母 Bijective Hexavigesimal时遇到问题,就像Microsoft Excel / OpenOffice Calc的做法一样.

这是我的代码的一个版本,但没有给我我需要的输出


    var toHexvg = function(a){
     var x='';
     var let="_abcdefghijklmnopqrstuvwxyz";
     var len=let.length;
     var b=a;
     var cnt=0;
     var y = Array();
     do{
      a=(a-(a%len))/len;
      cnt++;
     }while(a!=0)
     a=b;
     var vnt=0;
     do{
      b+=Math.pow((len),vnt)*Math.floor(a/Math.pow((len),vnt+1));
      vnt++;
     }while(vnt!=cnt)
     var c=b;
     do{
      y.unshift( c%len );
      c=(c-(c%len))/len;
     }while(c!=0)
     for(var i in y)x+=let[y[i]];
     return x;
    }

我努力的最佳结果是:a b c d … y z ba bb bc – 虽然不是上面的实际代码.预期的输出是b b … y z aa ab ac … zz aaa aab aac … zzzzz aaaaaa aaaaab,你得到的图片.

基本上,我的问题更多的是做“数学”而不是功能.最终我的问题是:如何在Hexavigesimal转换中进行数学运算,直到[假设]无穷大,就像Microsoft Excel一样.

如果可能的话,还有源代码,提前谢谢.

解决方法

好的,这是我的尝试,假设您希望序列以“a”(代表0)开头并且继续:
a,b,c,...,y,z,aa,ab,ac,zy,zz,aaa,aab,...

这有效,希望有一定道理.时髦的线是因为它在数学上更有意义0用空字符串表示然后“a”将是1,等等.

alpha = "abcdefghijklmnopqrstuvwxyz";

function hex(a) {
  // First figure out how many digits there are.
  a += 1; // This line is funky
  c = 0;
  var x = 1;      
  while (a >= x) {
    c++;
    a -= x;
    x *= 26;
  }

  // Now you can do normal base conversion.
  var s = "";
  for (var i = 0; i < c; i++) {
    s = alpha.charAt(a % 26) + s;
    a = Math.floor(a/26);
  }

  return s;
}

但是,如果您打算按顺序打印它们,那么有更有效的方法.例如,使用递归和/或前缀和东西.

猜你在找的JavaScript相关文章