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

#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
int a[126], b[126], c[126], d[126];
bool ta[126], tb[126], tc[126];
string S, R1, R2, R3;
int main() {
  while (cin >> S) {
    int s = 0;
    R1 = "";
    R2 = "";
    R3 = "";
    for (int i = 0; i < S.size(); i++) {
      if (S[i] == '+') {
        s++;
        continue;
      }
      if (S[i] == '=') {
        s++;
        continue;
      }
      if (s == 0)
        R1 += S[i];
      if (s == 1)
        R2 += S[i];
      if (s == 2)
        R3 += S[i];
    }
    for (int i = 0; i < 126; i++)
      ta[i] = false, a[i] = 0;
    for (int i = 0; i < 126; i++)
      tb[i] = false, b[i] = 0;
    for (int i = 0; i < 126; i++)
      tc[i] = false, c[i] = 0;
    reverse(R1.begin(), R1.end());
    for (int i = 0; i < R1.size(); i++) {
      if (R1[i] == 'X')
        ta[i] = true;
      else
        a[i] = R1[i] - 48;
    }
    reverse(R2.begin(), R2.end());
    for (int i = 0; i < R2.size(); i++) {
      if (R2[i] == 'X')
        tb[i] = true;
      else
        b[i] = R2[i] - 48;
    }
    reverse(R3.begin(), R3.end());
    for (int i = 0; i < R3.size(); i++) {
      if (R3[i] == 'X')
        tc[i] = true;
      else
        c[i] = R3[i] - 48;
    }
    bool ok = false;
    for (int i = 0; i < 10; i++) {
      if (i == 0) {
        bool flag1 = ta[R1.size() - 1] && R1.size() > 1;
        bool flag2 = tb[R2.size() - 1] && R2.size() > 1;
        bool flag3 = tc[R3.size() - 1] && R3.size() > 1;
        if (flag1 || flag2 || flag3)
          continue;
      }
      for (int j = 0; j < R1.size(); j++)
        if (ta[j])
          a[j] = i;
      for (int j = 0; j < R2.size(); j++)
        if (tb[j])
          b[j] = i;
      for (int j = 0; j < R3.size(); j++)
        if (tc[j])
          c[j] = i;
      for (int j = 0; j < 126; j++)
        d[j] = 0;
      for (int j = 0; j < 126; j++) {
        d[j] += a[j] + b[j];
        if (j != 125)
          d[j + 1] += d[j] / 10, d[j] %= 10;
      }
      bool flag = true;
      for (int j = 0; j < 126; j++)
        if (c[j] != d[j])
          flag = false;
      if (flag) {
        printf("%d\\n", i);
        ok = true;
        break;
      }
    }
    if (!ok) {
      printf("NA\\n");
    }
  }
  return 0;
}

Error: WA

Fixed submission:

#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
int a[126], b[126], c[126], d[126];
bool ta[126], tb[126], tc[126];
string S, R1, R2, R3;
int main() {
  while (cin >> S) {
    int s = 0;
    for (int i = 0; i < S.size(); i++) {
      if (S[i] == '+') {
        s++;
        continue;
      }
      if (S[i] == '=') {
        s++;
        continue;
      }
      if (s == 0)
        R1 += S[i];
      if (s == 1)
        R2 += S[i];
      if (s == 2)
        R3 += S[i];
    }
    for (int i = 0; i < 126; i++)
      ta[i] = false, a[i] = 0;
    for (int i = 0; i < 126; i++)
      tb[i] = false, b[i] = 0;
    for (int i = 0; i < 126; i++)
      tc[i] = false, c[i] = 0;
    reverse(R1.begin(), R1.end());
    for (int i = 0; i < R1.size(); i++) {
      if (R1[i] == 'X')
        ta[i] = true;
      else
        a[i] = R1[i] - 48;
    }
    reverse(R2.begin(), R2.end());
    for (int i = 0; i < R2.size(); i++) {
      if (R2[i] == 'X')
        tb[i] = true;
      else
        b[i] = R2[i] - 48;
    }
    reverse(R3.begin(), R3.end());
    for (int i = 0; i < R3.size(); i++) {
      if (R3[i] == 'X')
        tc[i] = true;
      else
        c[i] = R3[i] - 48;
    }
    bool ok = false;
    for (int i = 0; i < 10; i++) {
      for (int j = 0; j < R1.size(); j++)
        if (ta[j])
          a[j] = i;
      for (int j = 0; j < R2.size(); j++)
        if (tb[j])
          b[j] = i;
      for (int j = 0; j < R3.size(); j++)
        if (tc[j])
          c[j] = i;
      for (int j = 0; j < 126; j++)
        d[j] = 0;
      for (int j = 0; j < 126; j++) {
        d[j] += a[j] + b[j];
        if (d[j] >= 10)
          d[j] -= 10, d[j + 1]++;
      }
      bool flag = true;
      for (int j = 0; j < 126; j++)
        if (c[j] != d[j])
          flag = false;
      if (flag) {
        printf("%d\\n", i);
        ok = true;
        break;
      }
    }
    if (!ok) {
      printf("NA\\n");
    }
  }
  return 0;
}