用c++写代码:给定正整数x和n,找出一个整数y,使得y^n最接近x,注意y^n可能小于、等于或者大于x。
时间: 2024-03-03 19:50:14 浏览: 149
C++ 解决二维最接近点对问题(二维最邻近点对问题)
以下是使用二分查找的C++代码实现:
```c++
#include <iostream>
using namespace std;
int main() {
int x, n;
cin >> x >> n;
int left = 1, right = x;
int ans = 1;
while (left <= right) {
int mid = left + (right - left) / 2;
long long pow_mid = 1;
for (int i = 1; i <= n; i++) {
pow_mid *= mid;
if (pow_mid > x) break;
}
if (pow_mid <= x) {
ans = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
cout << ans << endl;
return 0;
}
```
首先输入x和n,然后初始化left为1,right为x,ans为1,表示y的初始值为1。然后进入二分查找循环,每次取mid=(left+right)/2,计算mid的n次方,如果mid^n小于等于x,则更新ans为mid,因为我们要找最接近x的y^n,所以ans要取最接近的。如果mid^n大于x,则说明y需要更小一些,所以right要更新为mid-1。最终循环结束后,ans即为最接近x的y的值。需要注意的是,计算mid^n时可能会溢出,所以需要使用long long类型。
阅读全文