字符串中的数字为什么可以直接相加减呀

这是一道大数相加的模板

#include<iostream>
#include<cstdlib>
#include<string>

using namespace std;
string a[1001];
string add(string a, string b)
{
    string max = a, min = b;
    if (a.length() < b.length()) {
        max = b;
        min = a;
    }
    int la = max.size(), lb = min.size();
    int l = max.size() - 1, j;
    for (j = lb - 1; j >= 0; j--, l--)
        max[l] += min[j] - '0';
    for (j = la - 1; j >= 1; j--) {
        if (max[j] > '9') {
            max[j] -= 10;
            max[j - 1]++;
        }
    }
    if (max[0] > '9') {
        max[0] -= 10;
        max = "1" + max;
    }
    return max;

}
int main()
{
    int n;
    a[0] = "1";
    a[1] = "1";
    a[2] = "2";
    a[3] = "4";
    for (int i = 4; i < 1001; i++) {
        a[i] = add(add(a[i - 1], a[i - 2]), a[i - 4]);
    }
    while (cin >> n) {
        cout << a[n] << endl;
    }
}}

因为是字符,字符对应Ascii码