Problem p00110 (C++) — buggy submission, verdict: Runtime Error

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <sstream>
#include <stack>
#include <vector>
using namespace std;

#define REP(i, n) for (int(i) = 0; (i) < (n); (i)++)
#define FOR(i, a, b) for (int(i) = (a); (i) < (b); (i)++)
#define PUSH(n, v)                                                             \\
  for (int i = 0; i < (n); i++) {                                              \\
    int j;                                                                     \\
    cin >> j;                                                                  \\
    v.push_back(j);                                                            \\
  }
#define ALL(v) v.begin(), v.end()
#define print(s) cout << (s) << endl

string strAdd(string a, string b) {
  if (a.size() < b.size())
    return strAdd(b, a);

  reverse(a.begin(), a.end());
  reverse(b.begin(), b.end());

  int carry = 0;
  for (int i = 0; i < a.size(); i++) {
    a[i] += carry;
    if (i < b.size())
      a[i] += b[i] - '0';
    if (a[i] > '9') {
      carry = 1;
      a[i] -= 10;
    } else
      carry = 0;
  }

  if (carry)
    a += "1";
  reverse(a.begin(), a.end());
  return a;
}

bool checkStr(string s) { return s.size() > 1 && s[0] == '0'; }

bool isCorrect(string s) {
  int plus;
  REP(i, s.size()) {
    if (s[i] == '+') {
      plus = i;
      break;
    }
  }
  int equal;
  FOR(i, plus + 2, s.size()) {
    if (s[i] == '=') {
      equal = i;
      break;
    }
  }
  string a = "", b = "", c = "";
  REP(i, plus) { a += s[i]; }
  FOR(i, plus + 1, equal) { b += s[i]; }
  FOR(i, equal + 1, s.size()) { c += s[i]; }
  if (checkStr(a) || checkStr(b) || checkStr(c)) {
    return false;
  }
  return strAdd(a, b) == c;
}

string replaceX(string s, int j) {
  string t = "";
  REP(i, s.size()) {
    if (s[i] == 'X')
      t += (char)('0' + j);
    else
      t += s[i];
  }
  return t;
}

void solve110(string s) {
  REP(i, 10) {
    string t = replaceX(s, i);
    if (isCorrect(t)) {
      cout << i << endl;
      return;
    }
  }
  cout << "NA" << endl;
}

int main() {
  string s;
  while (cin >> s) {
    solve110(s);
  }
  return 0;
}

Error: 0

Fixed submission:

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <sstream>
#include <stack>
#include <vector>
using namespace std;

#define REP(i, n) for (int(i) = 0; (i) < (n); (i)++)
#define FOR(i, a, b) for (int(i) = (a); (i) < (b); (i)++)
#define PUSH(n, v)                                                             \\
  for (int i = 0; i < (n); i++) {                                              \\
    int j;                                                                     \\
    cin >> j;                                                                  \\
    v.push_back(j);                                                            \\
  }
#define ALL(v) v.begin(), v.end()
#define print(s) cout << (s) << endl

bool checkStr(string s) { return s.size() > 1 && s[0] == '0'; }

bool isCorrect(string s) {
  int plus;
  REP(i, s.size()) {
    if (s[i] == '+') {
      plus = i;
      break;
    }
  }
  int equal;
  FOR(i, plus + 2, s.size()) {
    if (s[i] == '=') {
      equal = i;
      break;
    }
  }
  string a = "", b = "", c = "";
  REP(i, plus) { a += s[i]; }
  FOR(i, plus + 1, equal) { b += s[i]; }
  FOR(i, equal + 1, s.size()) { c += s[i]; }
  if (checkStr(a) || checkStr(b) || checkStr(c)) {
    return false;
  }
  return stoi(a) + stoi(b) == stoi(c);
}

string replaceX(string s, int j) {
  string t = "";
  REP(i, s.size()) {
    if (s[i] == 'X')
      t += (char)('0' + j);
    else
      t += s[i];
  }
  return t;
}

void solve110(string s) {
  REP(i, 10) {
    string t = replaceX(s, i);
    if (isCorrect(t)) {
      cout << i << endl;
      return;
    }
  }
  cout << "NA" << endl;
}

int main() {
  string s;
  while (cin >> s) {
    solve110(s);
  }
  return 0;
}