Problem p00110 (C++)

Buggy submission (status: Runtime Error):
#include <algorithm>
#include <cstring>
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <string>
#include <vector>
using namespace std;
typedef long long ll;
using vi = vector<int>;

string str;
string stra;
int id = 0;

void pt(vector<int> v) {
  for (int r = 0; r < v.size(); r++) {
    cout << v[r];
  }
  cout << endl;
}

vi number() {
  vi res;
  for (; '0' <= stra[id] && stra[id] <= '9'; id++) {
    res.push_back(stra[id] - '0');
  }
  reverse(res.begin(), res.end());
  return res;
}
int solve() {
  stra = str;
  for (int i = 9; i >= 0; i--) {
    id = 0;
    for (int j = 0; j < (int)str.size(); j++) {
      if (str[j] == 'X') {
        stra[j] = i + '0';
      }
    }
    vi a = number();
    if (stra[id] == '+') {
      id++;
    }
    vi b = number();

    // a.resize(max(b.size() + 1,a.size()+1),0);

    // a.push_back(0);
    // while(a.size()<=b.size()){
    //   a.push_back(0);
    // }

    vi ab;
    int q;
    for (q = 0; q < a.size() && q < b.size(); q++) {
      ab.push_back(a[q] + b[q]);
    }
    for (; q < a.size(); q++) {
      ab.push_back(a[q]);
    }
    for (; q < b.size(); q++) {
      ab.push_back(b[q]);
    }
    ab.push_back(0);

    // for (int j = 0; j < (int)b.size(); j++) {
    //   a[j] += b[j];
    //   // if (a[j]>=10) {
    //   //   a[j] -= 10;
    //   //   a[j+1]++;
    //   // }
    // }

    // for (int j = b.size(); j < (int)(a.size()-1); j++) {
    //   if (a[j] >= 10) {
    //     a[j] -= 10;
    //     a[j+1]++;
    //   }
    // }
    for (int j = 0; j < (int)ab.size() - 1; j++) {
      if (ab[j] >= 10) {
        ab[j] -= 10;
        ab[j + 1]++;
      }
    }

    while (ab[ab.size() - 1] == 0) {
      ab.pop_back();
    }
    a = ab;
    // pt(a);
    //  int j;
    //  int k=0;
    //  int l=0;
    //  vi ab;
    //  for(j=0;j<int(a.size())&&j<int(b.size());j++){
    //    k=0;
    //    if(a[j]+b[j]+l>=10){
    //      k++;
    //      ab.push_back(a[j]+b[j]+l-10);
    //    }
    //    else{
    //      ab.push_back(a[j]+b[j]+l);
    //    }
    //    l=k;
    //  }
    //  for(;j<int(a.size());j++){
    //    k=0;
    //    if(a[j]+l>=10){
    //      k++;
    //      ab.push_back(a[j]+l-10);
    //    }
    //    else{
    //      ab.push_back(a[j]+l);
    //    }
    //    l=k;
    //  }
    //  for(;j<int(b.size());j++){
    //    k=0;
    //    if(b[j]+l>=10){
    //      k++;
    //      ab.push_back(b[j]+l-10);
    //    }
    //    else{
    //      ab.push_back(b[j]+l);
    //    }
    //    l=k;
    //  }
    //  if(l>0){
    //    ab.push_back(l);
    //  }
    //  a=ab;
    /////////
    if (stra[id] == '=') {
      id++;
    }

    vi c = number();
    if (a.size() != c.size()) {
      continue;
    }
    int flag = 0;
    for (int j = 0; j < (int)a.size(); j++) {
      if (a[j] == c[j]) {
        flag++;
      }
    }
    if (flag == (int)a.size()) {
      return i;
    }
  }
  return -1;
}
int main() {
  cin >> str;
  while (str.size()) {
    int ans = solve();
    if (ans >= 0) {
      cout << ans << endl;
    } else {
      cout << "NA" << endl;
    }
    str = "";
    cin >> str;
  }
  return 0;
}


Fixed submission:
#include <algorithm>
#include <cstring>
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <string>
#include <vector>
using namespace std;
typedef long long ll;
using vi = vector<int>;

string str;
string stra;
int id = 0;

void pt(vector<int> v) {
  for (int r = 0; r < v.size(); r++) {
    cout << v[r];
  }
  cout << endl;
}

vi number() {
  vi res;
  for (; '0' <= stra[id] && stra[id] <= '9'; id++) {
    res.push_back(stra[id] - '0');
  }
  reverse(res.begin(), res.end());
  return res;
}
int solve() {
  stra = str;
  for (int i = 9; i >= 0; i--) {
    id = 0;
    for (int j = 0; j < (int)str.size(); j++) {
      if (str[j] == 'X') {
        stra[j] = i + '0';
      }
    }
    vi a = number();
    if (stra[id] == '+') {
      id++;
    }
    vi b = number();

    // a.resize(max(b.size() + 1,a.size()+1),0);

    // a.push_back(0);
    // while(a.size()<=b.size()){
    //   a.push_back(0);
    // }

    vi ab;
    int q;
    for (q = 0; q < a.size() && q < b.size(); q++) {
      ab.push_back(a[q] + b[q]);
    }
    for (; q < a.size(); q++) {
      ab.push_back(a[q]);
    }
    for (; q < b.size(); q++) {
      ab.push_back(b[q]);
    }
    ab.push_back(0);

    // for (int j = 0; j < (int)b.size(); j++) {
    //   a[j] += b[j];
    //   // if (a[j]>=10) {
    //   //   a[j] -= 10;
    //   //   a[j+1]++;
    //   // }
    // }

    // for (int j = b.size(); j < (int)(a.size()-1); j++) {
    //   if (a[j] >= 10) {
    //     a[j] -= 10;
    //     a[j+1]++;
    //   }
    // }
    for (int j = 0; j < (int)ab.size() - 1; j++) {
      if (ab[j] >= 10) {
        ab[j] -= 10;
        ab[j + 1]++;
      }
    }

    if (ab[ab.size() - 1] == 0) {
      ab.pop_back();
    }
    a = ab;
    // pt(a);
    //  int j;
    //  int k=0;
    //  int l=0;
    //  vi ab;
    //  for(j=0;j<int(a.size())&&j<int(b.size());j++){
    //    k=0;
    //    if(a[j]+b[j]+l>=10){
    //      k++;
    //      ab.push_back(a[j]+b[j]+l-10);
    //    }
    //    else{
    //      ab.push_back(a[j]+b[j]+l);
    //    }
    //    l=k;
    //  }
    //  for(;j<int(a.size());j++){
    //    k=0;
    //    if(a[j]+l>=10){
    //      k++;
    //      ab.push_back(a[j]+l-10);
    //    }
    //    else{
    //      ab.push_back(a[j]+l);
    //    }
    //    l=k;
    //  }
    //  for(;j<int(b.size());j++){
    //    k=0;
    //    if(b[j]+l>=10){
    //      k++;
    //      ab.push_back(b[j]+l-10);
    //    }
    //    else{
    //      ab.push_back(b[j]+l);
    //    }
    //    l=k;
    //  }
    //  if(l>0){
    //    ab.push_back(l);
    //  }
    //  a=ab;
    /////////
    if (stra[id] == '=') {
      id++;
    }

    vi c = number();
    if (a.size() != c.size()) {
      continue;
    }
    int flag = 0;
    for (int j = 0; j < (int)a.size(); j++) {
      if (a[j] == c[j]) {
        flag++;
      }
    }
    if (flag == (int)a.size()) {
      return i;
    }
  }
  return -1;
}
int main() {
  cin >> str;
  while (str.size()) {
    int ans = solve();
    if (ans >= 0) {
      cout << ans << endl;
    } else {
      cout << "NA" << endl;
    }
    str = "";
    cin >> str;
  }
  return 0;
}