Maybe i am just not that good enough in math, but I am having a problem in converting a number into pure alphabetical Bijective Hexavigesimal just like how Microsoft Excel/OpenOffice Calc do it.

Here is a version of my code but did not give me the output i needed:

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

The best output of my efforts can get is: `a b c d ... y z ba bb bc`

– though not the actual code above. The intended output is suppose to be `a b c ... y z aa ab ac ... zz aaa aab aac ... zzzzz aaaaaa aaaaab`

, you get the picture.

Basically, my problem is more on doing the ”math” rather than the function. Ultimately my question is: How to do the Math in Hexavigesimal conversion, till a [supposed] infinity, just like Microsoft Excel.

And if possible, a source code, thank you in advance.

## Answer

Okay, here’s my attempt, assuming you want the sequence to be start with “a” (representing 0) and going:

a, b, c, ..., y, z, aa, ab, ac, ..., zy, zz, aaa, aab, ...

This works and hopefully makes some sense. The funky line is there because it mathematically makes more sense for 0 to be represented by the empty string and then “a” would be 1, etc.

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

However, if you’re planning to simply print them out in order, there are far more efficient methods. For example, using recursion and/or prefixes and stuff.