一直寻找大倍数
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);
我的代码旨在通过var num循环,并返回4个连续数字中的最高倍数。在此示例中,在var num的末尾的九个块中,答案显然为4 x 9。但是,发生的事情是,一旦倍数开始变得更少(即在第一个2九和2八个八个块之后),结果不再存储,并且8 x 9 x 9 x 8的结果是回。我该如何告诉我的代码继续通过var num?
,而不是将num
转换为字符串,而是将其存储为字符串:
var strNum = "10234657899876543299999991";
这将为您带来预期的结果,即9^4(或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);
问题在于,在您的代码中,strNum
并不是num
的所有数字的字符串。相反,它是其科学符号的一串。检查一下:
var num = 10234657899876543299999991;
var strNum = num.toString();
console.log(strNum);
和(1.0234657899876543e 25)超过了max_safe_integer:
console.log(Number.MAX_SAFE_INTEGER.toExponential())