#include <bits/stdc++.h>
//#define int long long
#define ioss ios::sync_with_stdio(0), cin.tie(0)
using namespace std;
template <class cl>
void read(cl &x)
{
x = 0;
int f = 0;
char ch;
ch = getchar();
while (!isdigit(ch))
{
f = f | (ch == '-'), ch = getchar();
}
while (isdigit(ch))
{
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar();
}
x = f ? -x : x;
return;
}
template <class cl>
void put(cl x)
{
if (x < 0)
putchar('-'), x = -x;
if (x > 9)
put(x / 10);
putchar(x % 10 + '0');
return;
}
int jud=0;
int ans[30];
int tt;
int t1;
int len;
char ch[50];
// 这里的一切都是从0开始计数的,这样可以省去取整时的麻烦。
inline void dfs(int pos)
{
if(jud) return ;
if(pos>=len) //pos==len 的时候结束,但是结果为0到pos-1。
{
jud=1;
for(int i=0;i<=len/2;i++)
{
cout<<ans[i];
}
puts("");
// exit(0);
return ;
}
for(int i=0;i<=9;i++)
{
tt=0;
ans[pos]=i;
// else ans[pos]=0;//这里要注意。
for(int j=0;j<=pos;j++)
{
t1=ans[j]*ans[pos-j]%10;
tt=(tt+t1)%10;
}
if(tt==(int)(ch[pos]-'0'))
{
dfs(pos+1);
}
if(jud) return ;
}
/*
if(i>=10) //这样是不对的,会造成找不全。
{
exit(0);
return ;
}
*/
}
signed main()
{
scanf("%s",ch);
len=strlen(ch);
if(len%2==0)
{
puts("-1");
return 0;
}
int j=len-1;
int cnt=0;
while(ch[j]=='0')
{
j--;
cnt++;
}
if(cnt%2==1)
{
puts("-1");
return 0;
}
dfs(0);
if(jud==0)
{
puts("-1");
return 0;
}
return 0;
}
这个测评有问题。输入146 输出12 是错误的 但是这个代码通过测试了。