有这样一个式子 x2+S(x)∗x−n=0 x,n都是正整数, S(x)为x所有十进制数位的和 现在给你一个n,你需要找到最小的x使得等式成立。 输入格式: 输入一个整数n 输出格式: 输出一个整数 如果不存在一个整数使得等式成立,输出-1 样例输入1: 110 样例输出1: 10 样例输入2: 4 样例输出2: -1 约定: 1<=n<=1018 c++
时间: 2024-04-17 18:26:33 浏览: 97
具有(x2m + x +δ+ s)+ x形式的两类置换多项式
对于给定的n,我们需要找到一个正整数x,使得x的平方加上x的十进制数位和的乘积等于n。
我们可以通过遍历所有可能的x值来解决这个问题。从1开始,计算每个x的平方和十进制数位和的乘积,直到找到符合条件的x或者遍历完所有可能的x。
具体的算法如下:
1. 初始化一个变量x为1。
2. 从x开始,计算x的平方加上x的十进制数位和的乘积,记为sum。
3. 如果sum等于n,则找到符合条件的x,输出x并结束。
4. 如果sum大于n,则不存在符合条件的x,输出-1并结束。
5. 如果sum小于n,则将x增加1,继续执行步骤2。
下面是C++代码的实现:
```cpp
#include <iostream>
using namespace std;
int digitSum(int x) {
int sum = 0;
while (x > 0) {
sum += x % 10;
x /= 10;
}
return sum;
}
int main() {
long long n;
cin >> n;
int x = 1;
while (true) {
long long sum = x * x + digitSum(x) * x;
if (sum == n) {
cout << x << endl;
break;
} else if (sum > n) {
cout << -1 << endl;
break;
}
x++;
}
return 0;
}
```
注意:根据题目要求,n的范围是1到1018,因此我们需要使用long long类型来存储n。另外,为了计算x的十进制数位和,我们定义了一个辅助函数digitSum。
阅读全文