思路:
x2 + s(x)·x - n = 0,把这个方程配方一下,可以求出x的表达式。
int x=sqrt(n+s*s/4)-s/2;因为s最多81,所以可以直接枚举所有x,再进行验证。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define mx 1000000000
using namespace std;
long long n;
bool jud(int x){
long long sum=1LL*x*x;//这里没有加1LL会直接导致数据爆掉
int te=0,y=x;
while(y){
te=te+y%10;
y=y/10;
}
sum+=1LL*x*te;//这里同样需要加1LL
if(sum==n) return 1;
else return 0;
}
int main(){
// while(1){
scanf("%I64d",&n);
int flag=0;
for(int i=1;i<=81;i++){
int an=sqrt(n+i*i/4)-i/2;
if(jud(an)) {
flag=1;
cout<<an<<endl;
break;
}
}
if(!flag) puts("-1");
// else cout<<cen<<endl;
// }
return 0;
}