2016-12-25 1 views
1
var num = 10234657899876543299999991; 
var strNum = num.toString(); 
var total = 1; 
var greatest = 1; 

for(var start = 0; start <= strNum.length; start ++){ 
    for(var i = start; i <= start + 3; i ++){ 
    total *= strNum.charAt(i); 
} 
    if(total > greatest){ 
    greatest = total; 
    } 
    total = 1; 
} 

alert(greatest); 

Mon code est conçu pour effectuer une boucle sur var num et renvoyer le multiple le plus élevé de 4 nombres consécutifs. Dans cet exemple, la réponse est clairement 4 x 9 dans le bloc de neuf vers la fin de var num. Cependant, une fois que le multiple commence à diminuer (c'est-à-dire après le premier bloc de 2 neuf et de 2 huitièmes), les résultats ne sont plus stockés et le résultat de 8 x 9 x 9 x 8 est celui qui est revenu. Comment puis-je dire à mon code de continuer à chercher de grands multiples tout au long de var num?Projet Euler 8 Javascript

Répondre

1

Au lieu de convertir num à une chaîne, le stocker sous forme de chaîne déjà:

var strNum = "10234657899876543299999991"; 

Cela vous donnera le résultat attendu, qui est 9^4 (ou 6561):

var strNum = "10234657899876543299999991"; 
 
var total = 1; 
 
var greatest = 1; 
 

 
for(var start = 0; start <= strNum.length; start ++){ 
 
    for(var i = start; i <= start + 3; i ++){ 
 
    total *= strNum.charAt(i); 
 
} 
 
    if(total > greatest){ 
 
    greatest = total; 
 
    } 
 
    total = 1; 
 
} 
 

 
alert(greatest);

Le problème est que, dans votre code, strNum est pas exactement une chaîne avec tous les chiffres de num. Au lieu de cela, c'est une chaîne de sa notation scientifique. Vérifiez ceci:

var num = 10234657899876543299999991; 
 
var strNum = num.toString(); 
 
console.log(strNum);

Et que (1.0234657899876543e + 25) est sur le chemin MAX_SAFE_INTEGER:

console.log(Number.MAX_SAFE_INTEGER.toExponential())

+0

Brillant, merci! Je suis content que ce fut une solution simple. – Jackets82