纯粹数学题。如果无脑直接枚举肯定超时。
所以我就超时了。。。
后来分析了一下。
x^2+s(x)*x-n=0,能拆开成 x*(x+s(x))=n的形式,由于n小于10^18次方,x最大s(x)=162,所以能够得到不等式 sqrt(n)-162<=x<=sqrt(n);
剩下的就没啥了
/*
USER_ID: test#bupt_wcy
PROBLEM: 130
SUBMISSION_TIME: 2017-01-26 21:04:55
*/
#include<iostream>
#include<cmath>
using namespace std;
long long s(long long x)
{
long long temp=0;
while(x)
{
temp+=x%10;
x=x/10;
}
return temp;
}
int main()
{
long long n;
while(cin>>n)
{
long long RootOfN=sqrt(n);
long long u=RootOfN-200>0?RootOfN-200:1;
for(long long x=u;;x++)
{
if(x==sqrt(n-s(x)*x))
{
cout<<x<<endl;break;
}
if(x>RootOfN){
cout<<"-1\n";
break;
}
}
}
}