1

我正在尝试编写一个代码来计算给定数字中 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 的性质、我使用的计算机、编译器还是什么?

4

1 回答 1

2

与许多事情一样,您会遇到 JavaScript 中使用的基本数据类型的限制。在这种情况下,它似乎是整数类型的限制。

数字 13245678901234567890 适合 64 位整数。添加另一个数字会将其推入无法以这种方式表示的范围,因此需要浮点数。

在不同的 JavaScript 引擎中进行测试时,您可能会得到不同的值。超过 2147483648 的任何内容都可能最终被转换为浮点值。

每当您进行数学计算时,请尽量避免对它们进行字符串计算。数字的字符串表示相当随意,不可信。

您应该做的是除以 10 的某个因子并进行模 10 以获得各个数字。

于 2013-02-20T06:38:06.883 回答