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

#include <bits/stdc++.h>

using namespace std;

#define int long long
#define ll long long
#define mp make_pair
#define pb push_back
#define eb emplace_back
#define pii pair<ll, ll>
#define vpii vector<pair<ll, ll>>
#define F first
#define S second
#define ld long double
#define built __builtin_popcountll
#define mst(a, i) memset(a, i, sizeof(a))
#define all(x) x.begin(), x.end()
#define itit(it, a) for (auto it = (a).begin(); it != (a).end(); it++)
#define rep(i, a, b) for (ll i = a; i < b; i++)
#define repr(i, a, b) for (ll i = a; i > b; i--)
#define reprr(i, a, b) for (ll i = a; i >= b; i--)
#define pi 3.14159265358979323846264338327950288419716939937510582097494459230
ll max3(ll x, ll y, ll z) { return max(max(x, y), z); }
ll min3(ll x, ll y, ll z) { return min(min(x, y), z); }
const ll N = 1e5 + 10, M = 2e5 + 10, M2 = 1e6 + 10, mod = 1e9 + 7,
         inf = 1e17 + 10;
const int INF = 1e9 + 7;
void add(int &a, int b) {
  a += b;
  if (a >= mod) {
    a -= mod;
  }
}

int X[] = {0, 1, 0, -1};
int Y[] = {-1, 0, 1, 0};
// assic value of ('0'-'9') is(48 - 57) and (a-z) is (97-122) and (A-Z)
// is(65-90) and 32 for space
ll pow(ll x, ll n) {
  ll result = 1;
  while (n > 0) {
    if (n % 2 == 1)
      result = (result * x);
    x = ((x) * (x));
    n = n / 2;
  }
  return result;
}

string p = "abcdefghijklmnopqrstuvwxyz";
int a[20];
int sum[20];

int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  string ans = "";
  while (n) {
    n--;
    ans += p[n % 26];
    n /= 26;
  }
  reverse(all(ans));
  cout << ans;
  return 0;
}

Error: WA

Fixed submission:

#include <bits/stdc++.h>

using namespace std;

#define int long long
#define ll long long
#define mp make_pair
#define pb push_back
#define eb emplace_back
#define pii pair<ll, ll>
#define vpii vector<pair<ll, ll>>
#define F first
#define S second
#define ld long double
#define built __builtin_popcountll
#define mst(a, i) memset(a, i, sizeof(a))
#define all(x) x.begin(), x.end()
#define itit(it, a) for (auto it = (a).begin(); it != (a).end(); it++)
#define rep(i, a, b) for (ll i = a; i < b; i++)
#define repr(i, a, b) for (ll i = a; i > b; i--)
#define reprr(i, a, b) for (ll i = a; i >= b; i--)
#define pi 3.14159265358979323846264338327950288419716939937510582097494459230
ll max3(ll x, ll y, ll z) { return max(max(x, y), z); }
ll min3(ll x, ll y, ll z) { return min(min(x, y), z); }
const ll N = 1e5 + 10, M = 2e5 + 10, M2 = 1e6 + 10, mod = 1e9 + 7,
         inf = 1e17 + 10;
const int INF = 1e9 + 7;
void add(int &a, int b) {
  a += b;
  if (a >= mod) {
    a -= mod;
  }
}

int X[] = {0, 1, 0, -1};
int Y[] = {-1, 0, 1, 0};
// assic value of ('0'-'9') is(48 - 57) and (a-z) is (97-122) and (A-Z)
// is(65-90) and 32 for space
ll pow(ll x, ll n) {
  ll result = 1;
  while (n > 0) {
    if (n % 2 == 1)
      result = (result * x);
    x = ((x) * (x));
    n = n / 2;
  }
  return result;
}

string p = "abcdefghijklmnopqrstuvwxyz";
int a[20];
int sum[20];

int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  string ans = "";
  int sz = 1;
  if (n <= 26) {
    cout << p[n - 1];
    return 0;
  }
  for (int i = 1; i < 15; i++) {
    a[i] = pow(26ll, i);
    if (i)
      sum[i] = sum[i - 1] + a[i];
    if (sum[i] >= n) {
      sz = i;
      break;
    }
  }
  n -= sum[sz - 1];
  while (n) {
    sz--;
    int x = n / a[sz] - 1;
    ans += p[x];
    n %= a[sz];
  }
  cout << ans;
  return 0;
}