我正在尝试编写一个代码,该代码将找出给定数字中5个连续数字的最大乘积
我试图将数字转换为数组,然后循环遍历数组,将每5个连续的单个数字相乘,并将其与最后一个数字进行比较。
一旦我通过该函数的数字超过21位数,我猜测计算机将该数字转换为科学计数法,这会使整个函数关闭。
这是代码,它可以运行21位数:
function func(value){
var number = value;
console.log(number);
var output = [];
sNumber = number.toString();
console.log(sNumber);
for (var i = 0; i < sNumber.length; i++) {
output.push(+sNumber.charAt(i));
}
console.log(output);
var productToCompare;
var largerProduct = 0;
for (var j = 0; j < output.length - 4; j++) {
productToCompare = output[j]*output[j+1]*output[j+2]*output[j+3]*output[j+4];
console.log(productToCompare);
if (productToCompare > largerProduct) {
largerProduct = productToCompare;
}
}
return largerProduct;
}
func(13245678901234567890);
我添加另一个数字后不久:
func(123465789012345678901);
它开始使用科学记数法 这是由于Javascript的性质,我正在使用的计算机,编译器还是什么?
答案 0 :(得分:2)
与很多事情一样,你会遇到JavaScript中使用的基本数据类型的限制。在这种情况下,它似乎是整数类型的限制。
数字13245678901234567890适合64位整数。添加另一个数字会将其推送到无法以这种方式表示的范围内,因此需要浮点数。
在不同的JavaScript引擎中测试时,您可能会得到不同的值。超出2147483648的任何内容都有可能最终被视为浮点值。
每当你进行数学计算时,尽量避免对它们进行字符串计算。数字的字符串表示是相当随意的,不可信任。
你应该做的是除以10的因子并用模10来得到个别数字。