1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <bits/stdc++.h>
using namespace std;

const int base = 1 << 20;
long long ans = 0, ac_ans = 0; //result ; aktualna ilosc liczb stanowiacych potencjalny poczatek dla liczby

int32_t main(){

    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    string s1, s2, res; cin >> s1 >> s2 >> res;
    int n = s1.size();

    int add_one = 0;
    for(int i = n - 1; i >= 0; i--){
        int one = int(s1[i] - '0'), two = int(s2[i] - '0'), res_t = int(res[i] - '0');
        if(one + two + add_one == res_t || one + two + add_one - 10 == res_t){
            if(one + two + add_one < 10){
                ac_ans++;
                ans += ac_ans;
            }

            if(one + two + add_one >= 10) add_one = 1;
            else add_one = 0;
        }
        else{
            ac_ans = 0;
            if(one + two == res_t){
                ac_ans++;
                ans++;
            }

            if(one + two >= 10 && one + two - 10 == res_t) add_one = 1;
            else add_one = 0;
        }
    }

    cout << ans;
    return 0;
}