B - Non-square Equation
#include<stdio.h> #include<math.h> #include<string.h> #include<ctype.h> #include<iostream> #include<algorithm> #include<queue> #include<bitset> #include<vector> #include<map> typedef long long ll; using namespace std; ll check(ll x) { ll ans=0; while(x) { ans+=(x%10); x=(x-(x%10))/10; } return ans; } int main() { ll n;cin>>n; ll fin=1e18; for(ll i=1;i<=81;i++) { ll sqr=sqrt(i*i+4*n); if(sqr*sqr!=i*i+4*n) continue; if((sqr-i)%2==1) continue; ll x=(sqr-i)/2; if(check(x)!=i) continue; fin=min(fin,x); } if(fin!=1e18) cout<<fin<<endl; else cout<<-1<<endl; }
思路:首先仔细观察可以发觉这是一个一元二次公式,我们可以枚举1-81这个数去求x值,补题的时候思路想到了但实现的时候出了点差错磨蹭了半天,总结一下判断一个数开放后是否是不是小数,不用转换double,直接相乘与原式比较即可