试图解决8号项目的欧拉数字8

时间:2016-02-19 07:07:56

标签: c++ for-loop

这是问题的关联。 https://projecteuler.net/problem=8

下面是我的代码。

#include <stdio.h>

int main() {
    long i,sum;
    long temp = 0;
    long arr[1000] = {
    // Increasingly large number is ommitted//
    // I just add ',' between each numbers//};

    for(i=0; i<988; i++){
        sum = arr[i]*arr[i+1]*arr[i+2]*arr[i+3]*arr[i+4]*arr[i+5]*arr[i+6]
             *arr[i+7]*arr[i+8]*arr[i+9]*arr[i+10]*arr[i+11]*arr[i+12];
        if(temp<sum){
            temp = sum;
        }
    }

    printf("%ld",temp);
    return 0;
}

所以我得到了2091059712这似乎是一个合理的答案。

2 个答案:

答案 0 :(得分:1)

这里真正的问题是,您没有考虑产品的大小。整数最大为10位(2,147,483,647)。所以这个或类似的事情可能会发生:

sum = 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9;

这给出:2,541,865,828,329,它会溢出整数,导致未定义的行为。

使用更大的整数类型或采用不同的方法。

答案 1 :(得分:0)

这是一个强力解决方案,可以解决这个问题。

潜在的改进:

  • 将数组拆分为“0”,并仅测试长度超过所需长度的子串。
  • 打印出最终成为最佳子字符串的数字。通过这种方式,您可以测试它实际上是否存在于原始中,并且乘法正确完成。