当前位置: 代码迷 >> 综合 >> CodeForces - 233B - Non-square Equation(不小心会爆int)
  详细解决方案

CodeForces - 233B - Non-square Equation(不小心会爆int)

热度:103   发布时间:2023-11-06 18:35:45.0

思路:

x2?+?s(xx?-?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 1000000000using 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;
}