C++ 试图解决第八个项目,欧拉8号

C++ 试图解决第八个项目,欧拉8号,c++,for-loop,C++,For Loop,这就是问题的症结所在。 下面是我的代码 #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++){

这就是问题的症结所在。

下面是我的代码

#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;
}
#包括
int main(){
长i,sum;
长期温度=0;
长arr[1000]={
//数量越来越多//
//我只是在每个数字之间加上“,/”;

对于(i=0;i,这是一个蛮力解决方案,对于这种规模的问题很有效

可能的改进:

  • 在“0”上拆分数组,并仅测试长于所需长度的子字符串
  • 打印出最终成为最佳子字符串的数字。这样你就可以测试它是否真的存在于原始字符串中,以及乘法是否正确

这里真正的问题是,您没有考虑产品的大小。一个整数最多是10位数字(2147483647)。因此可能会发生以下情况:

sum = 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9 * 9;
这将导致:2541865828329溢出整数,从而导致未定义的行为


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

那么问题是什么?请指定您的实际问题仅供参考:您得到的答案不正确。大约是23,xxx,xxx,xxx,正如Floris所说,您需要使用较大的容量变量(例如
long