Peut-être que je ne suis pas suffisamment bon en mathématiques, mais j'ai un problème pour convertir un nombre en alphabétique pur BIJEFIVE HEXAVIGESIMAL Comme comment Microsoft Excel / OpenOffice Calc le faire.
Voici une version de mon code mais ne m'a pas donné la sortie dont j'avais besoin: P>
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;
}
6 Réponses :
A code> représente 0 code> et z code> représente 25 code>. Donc, le nombre après z code> est 26 code>, qui est 1 * 26 + 0 code>, donc ba code> est correct. (Et le numéro après zzzzz code> est Baaaaa code>.) P>
UHM, je suppose, mais comment le programmer pour vous assurer que le prochain zzz est AAAA ..? Tout comme les colonnes dans Excel / Calc ..? ^^
Oh bien, je n'ai pas Excel Calc, j'ai peur. Je soupçonne qu'ils réduisent simplement la première lettre d'une lettre.
Ce n'est pas aussi simple que A = 0 à z = 25. Le système est après z il va à AA. Puis après zz est AAA. Etc. Donc, la recherche du numéro NTH i> est plus compliquée qu'une conversion à la base 26 avec des lettres sous forme de chiffres.
@nnnnnn: Si tel est le cas, alors mon commentaire est correct - ils font simplement une conversion standard, puis décrément le premier chiffre.
Ce n'est pas vraiment utile. L'auteur comprend déjà la conversion de base.
Non, Zzz vient après Baa parce que vous vous endormez après avoir compté le mouton. ;-)
D'accord, voici ma tentative, en supposant que vous souhaitiez que la séquence commence par «A» (représentant 0) et allant:
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;
}
Merci!! ^^ tu es génial ..! Je n'ai jamais pensé à le faire de cette façon ... merci beaucoup ... je vais mettre ton nom dans les crédits une fois que le site est opérationnel, merci ... - ^^
Pas de soucis, pas besoin de crédit, le code doit être partagé et manipulé librement. De plus, User826788 n'est pas très romantique ... merci @jesse, n'a même pas remarqué!
Ce serait la méthode de récursion: alpha = "abcdefghijklmnopqrstuvwxyz"; code> fonction A (NUM) {NUM = NUM> 0? num - 1: 0; Si (num
Je ne comprends pas comment travailler à partir d'une formule, mais je me suis trompé avec un peu de temps et je suis proposé l'algorithme suivant pour compter littéralement jusqu'au numéro de colonne demandé:
var getAlpha = (function() {
var alphas = [null, "a"],
highest = [1];
return function(decNum) {
if (alphas[decNum])
return alphas[decNum];
var d,
next,
carry,
i = alphas.length;
for(; i <= decNum; i++) {
next = "";
carry = true;
for(d = 0; d < highest.length; d++){
if (carry) {
if (highest[d] === 26) {
highest[d] = 1;
} else {
highest[d]++;
carry = false;
}
}
next = String.fromCharCode(
highest[d] + 96)
+ next;
}
if (carry) {
highest.push(1);
next = "a" + next;
}
alphas[i] = next;
}
return alphas[decNum];
};
})();
alert(getAlpha(27)); // "aa"
alert(getAlpha(100000)); // "eqxd"
Bien que @ user826788 ait déjà publié un code de travail (qui est même un tiers plus rapide), je posterai mon propre travail, que je faisais avant de trouver les messages ici (comme je ne connaissais pas le mot "hexavigesimal"). Cependant, cela inclut également la fonction de l'inverse. Notez que j'utilise A = 1 comme je l'utilise pour convertir l'élément de liste de départ de à p> : p>
BTW dans Firefox La limite supérieure de Type = "A" listes code> est 2147483647 code> ou fxshrxw code>;)
Il suffit de terminer l'écriture Ce code plus tôt ce soir, et j'ai trouvé cette question sur un quête de déterminer quoi nommer la fichue chose. Ici, c'est (au cas où quelqu'un se sent comme l'utiliser):
Vous pouvez y accomplir avec une récursion, comme ceci:
const toBijective = n => (n > 26 ? toBijective(Math.floor((n - 1) / 26)) : "") + ((n % 26 || 26) + 9).toString(36);
// Parsing is not recursive
const parseBijective = str => str.split("").reverse().reduce((acc, x, i) => acc + ((parseInt(x, 36) - 9) * (26 ** i)), 0);
toBijective(1) // "a"
toBijective(27) // "aa"
toBijective(703) // "aaa"
toBijective(18279) // "aaaa"
toBijective(127341046141) // "overflow"
parseBijective("Overflow") // 127341046141
aa code> n'a pas vraiment de sens. C'est00 code>. Le "numéro" aprèsz code> estba code>, votre sortie semble donc être correcte. Ou est_ code> votre0 code>, ce qui semble un peu étrange?uhm, désolé pour le code de l'échantillon, suppose que je ne devrais pas la poster, je pense que cela a fait exprimer ma question plus compliqué, ahaha ... mais je suppose que mon résultat n'est que j'ai besoin d'un code qui génère le YZ AA AB et Non YX BA BB ... Et vous pourriez dire "" est le 0, mais la situation dont j'ai besoin est qu'aucune partie de la sortie ne peut contenir de " i>" ... ^^ hmmm
^ [Corrections]: Et vous pourriez dire "_" (Underscore) est le 0, mais la situation dont j'ai besoin est qu'aucune partie de la sortie ne peut contenir de "_" (Undercore) ...
@Felixkling - Si vous avez compté à l'infini dans la base 27 avec "" = 0, "A" = 1, .. "Z" = 26, "AA" = 27, "AA" = 28, etc., alors vous avez défini toutes les valeurs contenant "_" (0) dans n'importe quel "chiffre", la séquence restante correspond à la manière dont les colonnes étiquettes du logiciel de feuille de calcul. Donc, déterminer ce qu'est la étiquette avec, disons, la colonne 589 n'est pas simplement une conversion vers la base 26 ou la base 27 ...
Cette question ou Celui-ci < / a> traiter le même problème dans d'autres langues peut donner des indices
@nnnnnn: Oui j'ai compris maintenant. J'ai manqué la partie bijective i>, mais Wikipedia était utile :) merci!
Oh mon cher - base 27? À quoi je pensais? C'est ce qui se passe quand je posterai à minuit.
Merci d'avoir demandé cela - j'essayais de faire la même chose et j'ai eu recours à Googling.
J'ai écrit une fonction pour faire cela et je n'avais absolument aucune idée de quoi le nommer. :-( En fait Dû demander à un site SE différent , où la première réponse m'a amené à cela. +1 pour m'apprendre le mot "Numération bijective").