https://vpn.bupt.edu.cn/http/10.105.242.80/problem/p/130/
线性搜索,超时代码
/*
USER_ID: test#shizhuxiniubi
PROBLEM: 130
SUBMISSION_TIME: 2019-02-04 08:31:57
*/
#include <bits/stdc++.h>
#define FF(a,b) for(int a=0;a<b;a++)
#define F(a,b) for(int a=1;a<=b;a++)
#define LEN 100
#define INF 1000000
#define bug(x) cout<<#x<<"="<<x<<endl;
using namespace std;
typedef long long ll;
const double pi=acos(-1);
ll s(int x){
ll ans=0;
while(x){
ans+=x%10;
x/=10;
}
return ans;
}
int main()
{
// freopen("./in","r",stdin);
ll n,x;
cin>>n;
for(x=1;1;x++){
if(x*x>n){
puts("-1");
break;
}
if(x*x+s(x)*x==n){
printf("%lld\n",x);
break;
}
}
return 0;
}
缩小搜索范围,AC代码
#include <bits/stdc++.h>
#define FF(a,b) for(int a=0;a<b;a++)
#define F(a,b) for(int a=1;a<=b;a++)
#define LEN 100
#define INF 1000000
#define bug(x) cout<<#x<<"="<<x<<endl;
using namespace std;
typedef long long ll;
const double pi=acos(-1);
ll s(int x){
ll ans=0;
while(x){
ans+=x%10;
x/=10;
}
return ans;
}
int main()
{
// freopen("./in","r",stdin);
ll n,x,ans=-1,k;
cin>>n;
for(x=(ll)sqrt(n)+1,k=0;
x>=0 && k<18*9;
x--,k++){
if(x*x+x*s(x)==n){
ans=x;
break;
}
}
cout<<ans<<endl;
return 0;
}