Problem p02658 (C++)

Buggy submission (status: Runtime Error):
// #include <bits/stdc++.h>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <set>
#include <string>
#include <vector>
#define PI 3.14159265358979323846264338327950288
#define rep(i, n) for (int i = 0; i < n; i++)
#define exf(x)                                                                 \
  for (auto &&tmp : x) {                                                       \
    cout << tmp << endl;                                                       \
  } // 拡張for
#define testP                                                                  \
  cout << "------------------ test ------------------"                         \
       << endl;                                     // 動作確認テスト
#define testX(x) cout << "testout : " << x << endl; // テストアウト
typedef long long ll;
using namespace std;
const int MOD{int(1e9 + 7)}; // = 1000000007
const int inf{2100000000};   // = 2100000000 (MAX:2147483647)

// ------------------ ベクター表示 ------------------ //
void printVec(vector<int> &vec) {
  cout << "";
  for (auto it = vec.begin(); it != vec.end(); it++)
    cout << *it << " ";
  cout << endl;
}

// ------------------ ベクター合計 ------------------ //
int sumVec(vector<int> v) {
  int sum = 0;
  for (size_t i = 0; i < v.size(); i++)
    sum += v[i];
  return sum;
}

// -------------------------------------------------- //
// ------------------ ここから本編 ------------------ //
// -------------------------------------------------- //

int main(void) {

  ll N;
  cin >> N;
  vector<ll> A(N);
  bool ck = false;
  rep(i, N) {
    cin >> A[i];
    if (A[i] == 0)
      ck = true;
  }

  if (ck == true) {
    cout << 0 << endl;
  } else {
    ll ans = A[0];
    for (int i = 1; i < N; i++) {
      ans *= A[i];
      if (ans > (ll)1e18 || (ll)1e18 / ans < A[i]) {
        cout << "-1" << endl;
        return 0;
      }
    }
    cout << ans << endl;
  }
  return 0;
}


Fixed submission:
// #include <bits/stdc++.h>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <set>
#include <string>
#include <vector>
#define PI 3.14159265358979323846264338327950288
#define rep(i, n) for (int i = 0; i < n; i++)
#define exf(x)                                                                 \
  for (auto &&tmp : x) {                                                       \
    cout << tmp << endl;                                                       \
  } // 拡張for
#define testP                                                                  \
  cout << "------------------ test ------------------"                         \
       << endl;                                     // 動作確認テスト
#define testX(x) cout << "testout : " << x << endl; // テストアウト
typedef long long ll;
using namespace std;
const int MOD{int(1e9 + 7)}; // = 1000000007
const int inf{2100000000};   // = 2100000000 (MAX:2147483647)

// ------------------ ベクター表示 ------------------ //
void printVec(vector<int> &vec) {
  cout << "";
  for (auto it = vec.begin(); it != vec.end(); it++)
    cout << *it << " ";
  cout << endl;
}

// ------------------ ベクター合計 ------------------ //
int sumVec(vector<int> v) {
  int sum = 0;
  for (size_t i = 0; i < v.size(); i++)
    sum += v[i];
  return sum;
}

// -------------------------------------------------- //
// ------------------ ここから本編 ------------------ //
// -------------------------------------------------- //

int main(void) {

  ll N;
  cin >> N;
  vector<ll> A(N);
  bool ck = false;
  rep(i, N) {
    cin >> A[i];
    if (A[i] == 0)
      ck = true;
  }

  if (ck == true) {
    cout << 0 << endl;
  } else {
    ll ans = A[0];
    for (int i = 1; i < N; i++) {
      if (A[i] <= (ll)1e18 / ans) {
        ans *= A[i];
      } else {
        cout << "-1" << endl;
        return 0;
      }
    }
    cout << ans << endl;
  }
  return 0;
}