思路:
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;
}