Ghe*_*Ace 7 javascript excel 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- 虽然不是上面的实际代码.预期的输出是a b c ... y z aa ab ac ... zz aaa aab aac ... zzzzz aaaaaa aaaaab,你得到的图片.
基本上,我的问题更多的是做"数学"而不是功能.最后我的问题是:如何在Hexavigesimal转换中进行数学运算,直到[假设]无穷大,就像Microsoft Excel一样.
如果可能的话,还有一个源代码,提前谢谢你.
kar*_*nok 13
好的,这是我的尝试,假设您希望序列以"a"(表示0)开头并且继续:
a, b, c, ..., y, z, aa, ab, ac, ..., zy, zz, aaa, aab, ...
Run Code Online (Sandbox Code Playgroud)
这有效,希望有一定道理.时髦的线是因为它在数学上更有意义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;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您打算按顺序打印它们,那么有更有效的方法.例如,使用递归和/或前缀和东西.