#include <cstdio>
#include <cstdlib>
//using namespace std;
int main()
{
const int N = 1e6;
char *D1,*D2,*S;
long long int n,r,c,p,s,i;
D1 = (char*) malloc((N+1)*sizeof(char));
D2 = (char*) malloc((N+1)*sizeof(char));
S = (char*) malloc((N+1)*sizeof(char));
scanf("%s",D1);
scanf("%s",D2);
scanf("%s",S);
n = r = c = s = 0;
while (S[n])
{
n++;
}
n--;
for (; n >= 0; n--)
{
if (c + D1[n] - '0' + D2[n] - '0' == S[n] - '0')
{
c = 0; //carrier = 0
s++;
// printf("succ: n=%lld r=%lld c=%lld s=%lld : %lld + %d + %d == %d\n",n,r,c,s,c,D1[n]-'0',D2[n]-'0',S[n]-'0');
}
else if ((c + D1[n] - '0' + D2[n] - '0') % 10 == S[n] - '0')
{
c = 1;
// printf("part: n=%lld r=%lld c=%lld s=%lld : %lld + %d + %d = 1%d\n",n,r,c,s,c,D1[n]-'0',D2[n]-'0',S[n]-'0');
}
else if (D1[n] - '0' + D2[n] - '0' == S[n] - '0')
{
r += (s * (s + 1)) >> 1;
s = 1;
c = 0;
// printf("nsucc: n=%lld r=%lld c=%lld s=%lld : %d + %d != %d\n",n,r,c,s,D1[n]-'0',D2[n]-'0',S[n]-'0');
}
else if ((D1[n] - '0' + D2[n] - '0') % 10 == S[n] - '0')
{
r += (s * (s + 1)) >> 1;
s = 0;
c = 1;
// printf("npart: n=%lld r=%lld c=%lld s=%lld : %d + %d != 1%d\n",n,r,c,s,D1[n]-'0',D2[n]-'0',S[n]-'0');
}
else
{
r += (s * (s + 1)) >> 1;
s = 0;
c = 0;
// printf("fail: n=%lld r=%lld c=%lld s=%lld : %d + %d != %d\n",n,r,c,s,D1[n]-'0',D2[n]-'0',S[n]-'0');
}
}
r += (s * (s + 1)) >> 1;
printf("%lld\n",r);
fflush(stdout);
free(D1);
free(D2);
free(S);
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | #include <cstdio> #include <cstdlib> //using namespace std; int main() { const int N = 1e6; char *D1,*D2,*S; long long int n,r,c,p,s,i; D1 = (char*) malloc((N+1)*sizeof(char)); D2 = (char*) malloc((N+1)*sizeof(char)); S = (char*) malloc((N+1)*sizeof(char)); scanf("%s",D1); scanf("%s",D2); scanf("%s",S); n = r = c = s = 0; while (S[n]) { n++; } n--; for (; n >= 0; n--) { if (c + D1[n] - '0' + D2[n] - '0' == S[n] - '0') { c = 0; //carrier = 0 s++; // printf("succ: n=%lld r=%lld c=%lld s=%lld : %lld + %d + %d == %d\n",n,r,c,s,c,D1[n]-'0',D2[n]-'0',S[n]-'0'); } else if ((c + D1[n] - '0' + D2[n] - '0') % 10 == S[n] - '0') { c = 1; // printf("part: n=%lld r=%lld c=%lld s=%lld : %lld + %d + %d = 1%d\n",n,r,c,s,c,D1[n]-'0',D2[n]-'0',S[n]-'0'); } else if (D1[n] - '0' + D2[n] - '0' == S[n] - '0') { r += (s * (s + 1)) >> 1; s = 1; c = 0; // printf("nsucc: n=%lld r=%lld c=%lld s=%lld : %d + %d != %d\n",n,r,c,s,D1[n]-'0',D2[n]-'0',S[n]-'0'); } else if ((D1[n] - '0' + D2[n] - '0') % 10 == S[n] - '0') { r += (s * (s + 1)) >> 1; s = 0; c = 1; // printf("npart: n=%lld r=%lld c=%lld s=%lld : %d + %d != 1%d\n",n,r,c,s,D1[n]-'0',D2[n]-'0',S[n]-'0'); } else { r += (s * (s + 1)) >> 1; s = 0; c = 0; // printf("fail: n=%lld r=%lld c=%lld s=%lld : %d + %d != %d\n",n,r,c,s,D1[n]-'0',D2[n]-'0',S[n]-'0'); } } r += (s * (s + 1)) >> 1; printf("%lld\n",r); fflush(stdout); free(D1); free(D2); free(S); return 0; } |
English