2017-10-04 4 views
2

J'essaie de résoudre l'un des problèmes de codewars. Le problème est comme ci-dessous:Problèmes avec l'affichage de grands nombres en javascript

En mathématiques, les nombres de Fibonacci sont dans la séquence entière suivante, appelée la suite de Fibonacci, et caractérisé par le fait que chaque nombre y est la somme des deux précédents:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... Implémenter la fonction getFibonacci (n) qui retournera la représentation sous forme de chaîne du nombre sur la position n de la séquence de Fibonacci . J'ai élaboré mes codes, mais mon code ne peut dépasser le test que lorsque les nombres testés sont petits et a échoué à tous les tests lorsque de grands nombres impliqués et recevant le message d'erreur "Attendu: '30010821454963453907530667147829489881', a obtenu: ' 3.001082145496346e + 37 '". En outre, j'ai essayé d'ajouter toNotExponential() ou expandExponential() à la fin de mon déclaration de retour pour aider à montrer le nombre entier, cependant, soit le code fonctionne que je reçois des erreurs en disant "toNotExponential() n'est pas un function "ou" expandExponential() n'est pas une fonction ". Vous ne savez pas quoi faire, s'il vous plaît aider. Mon code comme ci-dessous ...

function getFibonacci(n) { 
    var arr= [1,1]; 
    var len = arr.length; 
    while(len<n){ 
    arr.push(arr[len-1]+arr[len-2]); 
    len++; 
    } 
    return (arr[len-1]+"").toNotExponential(); 
    } 
+0

Jetez un oeil à [cette question] (https://stackoverflow.com/questions/1685680/how-to-avoid-scientific-notation-for-large-numbers-in-javascript) – lztachyon

+0

Pour les numéros supérieurs à [ * Number.MAX_SAFE_INTEGER *] (http://ecma-international.org/ecma-262/8.0/#sec-number.max_safe_integer) '9007199254740991' vous devrez utiliser une bibliothèque, ou en écrire une vous-même. Voir [* Javascript additionnant les grands entiers *] (https://stackoverflow.com/questions/4557509/javascript-summing-large-integers) pour des suggestions. BTW, il n'y a pas de type 'int' en javascript, il y a juste des nombres. – RobG

+0

Vous pouvez stocker le nombre sous forme de chaîne, et utiliser des milliers comme délimiteur, où la longueur du nombre est déterminée par le maximum possible '.length' d'une chaîne, sans utiliser E-notation, voir [Comment ajouter 1 à un grand entier représenté sous forme de chaîne en JavaScript?] (https://stackoverflow.com/questions/43614407/how-do-i-add-1-to-a-big-integer-represented-as-a-string -in-javascript /) – guest271314

Répondre

0

Vous pouvez utiliser la somme des parties d'un nombre donné sous forme de chaîne pour effectuer des procédures mathématiques. Considérons que chaque trois chiffres d'un nombre où le .length du nombre comme une chaîne est supérieure à 3 peut être considéré comme des milliers, où l'ajout 1 à 999 se traduirait par 1000. Nous pouvons alors déclarer que l'ajout de N à 1000 donnerait 2000 si N est égal à 1000. Ainsi, nous pouvons utiliser les index d'une chaîne pour déterminer quels milliers précis nous itérons dans la chaîne, et sélectionner des groupes de 3 pour déterminer si un ou plusieurs nombres dans un ensemble adjacent de 3 doivent être recalculés, et affichés sous forme de nombres sans E-notation . Voir How do I add 1 to a big integer represented as a string in JavaScript?.