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,直接相乘与原式比较即可

posted on 2022-04-26 14:48  zesure  阅读(17)  评论(0编辑  收藏  举报

导航