Pagini recente » Cod sursa (job #1362745) | Cod sursa (job #1142903) | Cod sursa (job #337116) | Cod sursa (job #3216288) | Cod sursa (job #456)
Cod sursa(job #456)
#include <stdio.h>
#include <string.h>
int T;
char s[10005], s2[10005];
int tryit(int l, int n)
{
int i, j, k;
for (i = l, j = n - 1; 1; i++, j--)
{
if (i == j)
return s[i] % 2 == 0;
if (j - i == 1)
return s[i] == s[j] || (s[i] == s[j] + 11);
switch (s[i] - s[j])
{
case 0: break;
case 1: s[i + 1] += 10; break;
case 11:
s[i + 1] += 10;
case 10:
if (s[j] == 9) return 0;
for (s[k = j - 1]--; s[k] < 0 && k >= i; )
s[k] += 10, s[--k]--;
if (k == i) return 0;
break;
default: return 0;
}
}
}
int doit()
{
int n, i, j, k;
for (n = 0; s[n]; n++) s[n] -= '0';
if (n == 1) return (s[0]) % 2 == 0;
if (n == 2) return (s[0] == s[1]) || (s[0] == 1 && s[1] % 2 == 0);
if (s[0] == 1)
{
memcpy(s2, s, sizeof(s));
s[1] += 10;
if (tryit(1, n))
return 1;
else
if (s[0] == 1 && s[n - 1] == 0)
return 0;
else
{
memcpy(s, s2, sizeof(s2));
return tryit(0, n);
}
}
else
return tryit(0, n);
return 0;
}
int main()
{
freopen("invers.in", "rt", stdin);
freopen("invers.out", "wt", stdout);
for (scanf("%d", &T), gets(s); T; T--)
{
gets(s);
printf("%s\n", doit() ? "DA" : "NU");
}
return 0;
}