#include <iostream>
#include <queue>
using namespace std;
int main() {
cin.tie(0)->sync_with_stdio(0);
string a1,a2,s;
cin >> a1 >> a2 >> s;
for (auto&& c : a1)c-='0';
for (auto&& c : a2)c-='0';
for (auto&& c : s)c-='0';
int e=s.size(),b=s.size();
bool carry=0;
queue<int> carries;
long res=0;
while (b>0) {
--b;
signed char sum = a1[b]+a2[b]+carry;
bool oldcarry=carry;
if ((carry=(sum>9))) sum-=10;
if (sum==s[b]) {
if (!carry)
res+=e-b-carries.size();
} else {
if (oldcarry&&--sum<0) sum=9,carry=0;
while(!carries.empty()) carries.pop();
if (sum==s[b]) {
if (!carry)
++res;
e=b+1;
} else e=b,carry=0;
}
if (carry&&e>b) carries.push(b);
}
cout << res;
}
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 | #include <iostream> #include <queue> using namespace std; int main() { cin.tie(0)->sync_with_stdio(0); string a1,a2,s; cin >> a1 >> a2 >> s; for (auto&& c : a1)c-='0'; for (auto&& c : a2)c-='0'; for (auto&& c : s)c-='0'; int e=s.size(),b=s.size(); bool carry=0; queue<int> carries; long res=0; while (b>0) { --b; signed char sum = a1[b]+a2[b]+carry; bool oldcarry=carry; if ((carry=(sum>9))) sum-=10; if (sum==s[b]) { if (!carry) res+=e-b-carries.size(); } else { if (oldcarry&&--sum<0) sum=9,carry=0; while(!carries.empty()) carries.pop(); if (sum==s[b]) { if (!carry) ++res; e=b+1; } else e=b,carry=0; } if (carry&&e>b) carries.push(b); } cout << res; } |
English