#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
string a, b, c;
cin >> a >> b >> c;
long long result = 0;
int n = a.length();
int r = n - 1;
int l = n;
int rem = 0;
int lWithoutCarry = 0;
while (r >= 0) {
bool incorrect = false;
bool first = true;
while (l > 0) {
// printf("\n Without carry:%d\n", lWithoutCarry);
// printf("Czy nmożemy L: %d R: %d\n", l - 1, r);
int sum = a[l - 1] - '0' + b[l - 1] - '0' + rem;
if (sum % 10 != c[l - 1] - '0') {
incorrect = true;
// if (first) {
// if (r > l) result += lWithoutCarry;
// printf(" + %d\n", r - l);
// }
// printf("źle\n");
break;
}
// printf("ok\n");
--l;
if (sum < 10) {
// printf("nie bylo przeniesienia - dodaj wynik ");
++lWithoutCarry;
if (first) {
// printf(" + %d\n", lWithoutCarry);
result += lWithoutCarry;
first = false;
} else {
// printf(" + 1\n");
++result;
}
} else {
if (first) first = false;
}
rem = sum / 10;
}
if (r == l - 1) {
--l;
--r;
}
// printf("L: %d R: %d\n", l, r);
// printf("\n Przesun R -> Without carry:%d\n", lWithoutCarry);
rem = 0;
while (r > 0 && r >= l) {
int sum = a[r] - '0' + b[r] - '0' + rem;
// printf("Wywalamy sume: %d\n", sum);
if (sum < 10) {
--lWithoutCarry;
// printf("Nowe lwithoutcarry: %d\n", lWithoutCarry);
}
rem = sum / 10;
--r;
sum = a[r] - '0' + b[r] - '0';
// printf("Suma: %d C: %d\n", sum, c[r] - '0');
if (sum % 10 == c[r] - '0') {
// printf("L: %d R: %d -> Dodaj %d\n", l, r, lWithoutCarry);
result += lWithoutCarry;
}
}
rem = 0;
// printf("Po Without carry:%d\n", lWithoutCarry);
if(!l) break;
}
printf("%lld\n", result);
}
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | #include <iostream> #include <vector> #include <string> using namespace std; int main() { string a, b, c; cin >> a >> b >> c; long long result = 0; int n = a.length(); int r = n - 1; int l = n; int rem = 0; int lWithoutCarry = 0; while (r >= 0) { bool incorrect = false; bool first = true; while (l > 0) { // printf("\n Without carry:%d\n", lWithoutCarry); // printf("Czy nmożemy L: %d R: %d\n", l - 1, r); int sum = a[l - 1] - '0' + b[l - 1] - '0' + rem; if (sum % 10 != c[l - 1] - '0') { incorrect = true; // if (first) { // if (r > l) result += lWithoutCarry; // printf(" + %d\n", r - l); // } // printf("źle\n"); break; } // printf("ok\n"); --l; if (sum < 10) { // printf("nie bylo przeniesienia - dodaj wynik "); ++lWithoutCarry; if (first) { // printf(" + %d\n", lWithoutCarry); result += lWithoutCarry; first = false; } else { // printf(" + 1\n"); ++result; } } else { if (first) first = false; } rem = sum / 10; } if (r == l - 1) { --l; --r; } // printf("L: %d R: %d\n", l, r); // printf("\n Przesun R -> Without carry:%d\n", lWithoutCarry); rem = 0; while (r > 0 && r >= l) { int sum = a[r] - '0' + b[r] - '0' + rem; // printf("Wywalamy sume: %d\n", sum); if (sum < 10) { --lWithoutCarry; // printf("Nowe lwithoutcarry: %d\n", lWithoutCarry); } rem = sum / 10; --r; sum = a[r] - '0' + b[r] - '0'; // printf("Suma: %d C: %d\n", sum, c[r] - '0'); if (sum % 10 == c[r] - '0') { // printf("L: %d R: %d -> Dodaj %d\n", l, r, lWithoutCarry); result += lWithoutCarry; } } rem = 0; // printf("Po Without carry:%d\n", lWithoutCarry); if(!l) break; } printf("%lld\n", result); } |
English