请用c++实现这个问题,有这样一个式子 x2+S(x)∗x−n=0 x,n都是正整数, S(x)为x所有十进制数位的和 现在给你一个n,你需要找到最小的x使得等式成立。输入一个整数n输出一个整数 如果不存在一个整数使得等式成立,输出-1
时间: 2024-03-14 11:47:54 浏览: 60
圆排列问题的c语言实现
4星 · 用户满意度95%
好的,下面是C++实现的代码:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n;
cin >> n;
int s = 0;
for (int i = n; i > 0; i /= 10) {
s += i % 10;
}
for (int x = sqrt(n); x <= n; x++) {
if (x * x + s * x == n) {
cout << x << endl;
return 0;
}
}
cout << -1 << endl;
return 0;
}
```
这里我们先读入给定的整数n,然后计算出它的各个数字之和s。接下来用一个循环来枚举x的值,从$\sqrt n$开始,一直到n为止。如果当前的x满足等式,则输出它并直接退出程序。如果x的值都枚举完了还没有找到满足等式的x,就输出-1。
注意:上述代码只是一种简单的实现方式,可能会有性能上的问题。实际中应该根据具体要求进行优化。
阅读全文