Pagini recente » Cod sursa (job #1613634) | Cod sursa (job #2216998) | Cod sursa (job #544574) | Cod sursa (job #678441) | Cod sursa (job #1598036)
#include <bits/stdc++.h>
//#define fin cin
//#define fout cout
#define F first
#define S second
using namespace std;
const int Nmax = 100000 + 10;
int n;
int nr[Nmax];
char s[Nmax] , ans[Nmax];
bool ok(int L , int R)
{
int i , sum;
if (L > R) return 0;
for (i = 1; i <= n; ++i) nr[i] = s[i] - '0';
if (L == 1 && nr[R] == 0) return 0;
if (L == 2 && nr[1] != 1) return 0;
for (nr[L] += nr[L-1] * 10; true ; L++, R--)
{
if (L == R)
{
ans[L] = nr[L] / 2 + '0';
return nr[L] % 2 == 0;
}
if (L + 1 == R)
{
sum = nr[L]; if (nr[L] == nr[R] + 11) sum--;
ans[L] = ans[R] = sum / 2 + '0'; if (sum&1) ans[L]++;
return (nr[L] == nr[R] || nr[L] == nr[R] + 11);
}
if (nr[L] - nr[R] != 0 && nr[L] - nr[R] != 1
&& nr[L] - nr[R] != 10 && nr[L] - nr[R] != 11)
return 0;
sum = nr[L];
if (nr[L] == nr[R]);
if (nr[L] == nr[R] + 1 || nr[L] == nr[R] + 11)
sum--, nr[L+1] += 10;
if (nr[L] == nr[R] + 10 || nr[L] == nr[R] + 11)
{
if (nr[R] == 9) return 0; ///19
for (i = R - 1; i >= L && nr[i] == 0; --i)
nr[i] = 9;
if (i == L) return 0;
nr[i]--;
}
ans[L] = ans[R] = sum / 2 + '0'; if (sum&1) ans[L]++;
int mata = 5;
}
return 1;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.in","r",stdin);
freopen("output.out","w",stdout);
#endif // ONLINE_JUDGE
/*
#ifndef ONLINE_JUDGE
ifstream fin("input.in");
ofstream fout("output.out");
#endif // ONLINE_JUDGE
*/
gets(s+1); n = strlen(s+1);
/*if (ok(1,n)) puts(ans+1);
else if (ok(2,n)) puts(ans+2);
else printf("0\n");*/
if (ok(1,n)||ok(2,n)) puts("DA\n");
else puts("NU\n");
return 0;
}