#include <iostream>
#include <vector>
using namespace std;
long long rozwiaz(string A , string B, string C) {
long long suma = 0, ileKoncowek = 0, i = A.size() - 1;
bool przeniesienie = false;
while(i >= 0) {
if(!przeniesienie) { //nie ma przeniesienia
if((A[i] - 48) + (B[i] - 48) == (C[i] - 48)) {
ileKoncowek++;
suma += ileKoncowek;
}
else if(((A[i] - 48) + (B[i] - 48)) % 10 == (C[i] - 48)) {
przeniesienie = true;
ileKoncowek++;
}
else //nie ma przeniesienia i suma sie nie zgadza to zaczynamy nowy segment
ileKoncowek = 0;
}
else { //jest przeniesienie
if(((A[i] - 48) + (B[i] - 48)) == (C[i] - 48)) { //ale suma zgadza sie bez przeniesienia to zaczynamy nowy segment
przeniesienie = false;
ileKoncowek = 1;
suma+=ileKoncowek;
}
else if(((A[i] - 48) + (B[i] - 48)) + 1 == (C[i] - 48)) { //z przeniesieniem sie zgadza
suma+=ileKoncowek;
przeniesienie = false;
}
else if ((((A[i] - 48) + (B[i] - 48))) % 10 == (C[i] - 48)) {
ileKoncowek = 1;
}
else if ((((A[i] - 48) + (B[i] - 48)) + 1) % 10 != (C[i] - 48)){ //suma sie nie zgadza po przeniesieuniu zaczynamy nowy segment
ileKoncowek = 0;
przeniesienie = false;
}
//znowu mamy przeniesienie wiec nie wiemy co sie stanie, sprawdzamy kolejne przeniesienie
}
i--;
}
return suma;
}
int main() {
string a, b, c;
cin>>a>>b>>c;
printf("%lld", rozwiaz(a, b, c));
return 0;
}
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 | #include <iostream> #include <vector> using namespace std; long long rozwiaz(string A , string B, string C) { long long suma = 0, ileKoncowek = 0, i = A.size() - 1; bool przeniesienie = false; while(i >= 0) { if(!przeniesienie) { //nie ma przeniesienia if((A[i] - 48) + (B[i] - 48) == (C[i] - 48)) { ileKoncowek++; suma += ileKoncowek; } else if(((A[i] - 48) + (B[i] - 48)) % 10 == (C[i] - 48)) { przeniesienie = true; ileKoncowek++; } else //nie ma przeniesienia i suma sie nie zgadza to zaczynamy nowy segment ileKoncowek = 0; } else { //jest przeniesienie if(((A[i] - 48) + (B[i] - 48)) == (C[i] - 48)) { //ale suma zgadza sie bez przeniesienia to zaczynamy nowy segment przeniesienie = false; ileKoncowek = 1; suma+=ileKoncowek; } else if(((A[i] - 48) + (B[i] - 48)) + 1 == (C[i] - 48)) { //z przeniesieniem sie zgadza suma+=ileKoncowek; przeniesienie = false; } else if ((((A[i] - 48) + (B[i] - 48))) % 10 == (C[i] - 48)) { ileKoncowek = 1; } else if ((((A[i] - 48) + (B[i] - 48)) + 1) % 10 != (C[i] - 48)){ //suma sie nie zgadza po przeniesieuniu zaczynamy nowy segment ileKoncowek = 0; przeniesienie = false; } //znowu mamy przeniesienie wiec nie wiemy co sie stanie, sprawdzamy kolejne przeniesienie } i--; } return suma; } int main() { string a, b, c; cin>>a>>b>>c; printf("%lld", rozwiaz(a, b, c)); return 0; } |
English