题目链接
分析:直接二进制暴力就行,注意不能有前导0,没有其他正数只有一个0也不允许。
代码:
#include<iostream>
#include<cstdio>
#include<string.h>
#include<math.h>
using namespace std;
typedef long long ll;
char a[50];
int n;
int b[50];
int main()
{
while(scanf("%s",a)!=EOF)
{
n=strlen(a);
int j=0;
int f=0;
int numm=0;
for(int i=pow(2,n)-1;i>=0;i--)
{
int m=i;
j=0;
while(m)
{
b[j++]=m%2;
m/=2;
}
int num=0;
double val=0;
j=0;
int fl=0;
for(int k=0;k<n;k++)
{
if(b[k]==1)
{
if(a[j]!='0'||fl==1)
{
num++;
val=val*10+a[j]-'0';
fl=1;
}
}
j++;
}
int sq=sqrt(val);
int y1=sq*sq;
int y2=val;
if(y1==y2)
{
if(num!=0)
{
numm=max(numm,num);
}
}
memset(b,0,sizeof(b));
}
if(numm==0)
{
printf("-1\n");
}
else
{
printf("%d\n",n-numm);
}
}
return 0;
}