首页 > 解决方案 > 卡在项目 euler 的问题 8 上,得到错误的答案,但代码似乎正确

问题描述

#include <bits/stdc++.h>
using namespace std ;
typedef long long LL ;

int main(){
    int arr[1000] = {0} ;
    int k = 0 ;
    string s ;
    for (int i=0 ; i<20 ; i++){
        cin >> s ;
        for (int j=0 ; j<50 ; j++){
            arr[k] = (int)(s[j]-'0') ;
            k++ ;
        }
    }
    long long int product = 1 , maxi = 0 ;
    for (int i=0 ; i+12 < 1000 ; i++){
        product = 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 (maxi < product){
            maxi = product ;
        }
    }
    cout << maxi << endl ;
    return 0 ;
}

代码对我来说似乎很好,我一直得到 2091059712 输出,问题正在拒绝。请问你能找出异常吗

标签: c++algorithmmath

解决方案


您的数组元素是 type int,因此它们的乘法是使用int-- 即使结果被分配给 a long long int,这不会影响计算。这会导致溢出,因为在最坏的情况下,13 位数字的乘积可能高达 13^9 = 2541865828329 超过INT_MAX,这可能是 2^31 - 1。也许long long int用于数组类型,或者将元素转换为更大在将它们相乘之前为 int 类型。


推荐阅读