Let’s consider equation:
x2 + s(x)·x - n = 0,where x, n are positive integers, s(x) is the function, equal to the sum of digits of number x in the decimal number system.
You are given an integer n, find the smallest positive integer root of equation x, or else determine that there are no such roots.
InputA single line contains integer n (1 ≤ n ≤ 1018) — the equation parameter.
Please, do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use cin, cout streams or the %I64d specifier.
OutputPrint -1, if the equation doesn’t have integer positive roots. Otherwise print such smallest integer x (x > 0), that the equation given in the statement holds.
Examples Input 2 Output 1 Input 110 Output 10 Input 4 Output -1 NoteIn the first test case x = 1 is the minimum root. As s(1) = 1 and 12 + 1·1 - 2 = 0.
In the second test case x = 10 is the minimum root. As s(10) = 1 + 0 = 1 and 102 + 1·10 - 110 = 0.
In the third test case the equation has no roots.
枚举sx sx的范围可以看出最多不会超过100 由sx求x公式
#include <bits/stdc++.h> using namespace std; #define LL long long LL get(LL n) { LL sum=0; while(n) { sum += n; n /= 10; } return sum; } int main() { LL n, ans = -1; scanf("%lld",&n); for(int i = 1;i < 100; i++) { LL x = sqrt(i*i/4+n) - i/2; LL sx = get(x); if(x*x+sx*x==n) { ans = x; break; } } printf("%d\n",ans); }