题意:
描述
给定正整数B和N,找到整数A,使得A N尽可能接近B.(结果A是B的第N个根的近似)。注意,A N可以小于,等于,或大于B.
输入:输入由B和N的一对或多对值组成。每对出现在单个行上,由单个空格分隔。指定B和N的值零的线标记输入的结束。B的值在1至1,000,000(包括)的范围内,N的值在1至9(包括1和9)的范围内。
输出:对于输入中的每对B和N,如上定义的输出A本身在一行上。
| 示例输入: | 示例输出: |
| 4 3 5 3 27 3 750 5 1000 5 2000 5 3000 5 1000000 5 0 0 | 1 2 3 4 4 4 5 16 |
解题思路:
两边夹思想,求出第一个大于给定数的底数,那么他的前一个数就是小于给定的数的最接近给定数的值,然后比较大于这个数与小于这个数的计算值,输出最接近的底数。
代码如下:
#include <bits/stdc++.h>
using namespace std;
int main()
{ int n,N;
double h,j,B;
while(cin>>B>>N)
{
if(B==0&&N==0)
break;
for(int i=1;;i++)
{
h=pow(i,N);
j=pow(i+1,N);
if(h<B&&j>B)
{
n=abs(h-B)<j-B?i:i+1;
cout<<n<<endl;
break;
}
else if(h==B)
{cout<<i<<endl;
break;}
}
}
return 0;
}
寻找最接近的N次根
本文介绍了一种算法,该算法通过两边夹的思想来找到一个整数A,使得A的N次幂最接近给定的整数B。输入包括一系列正整数B和N的对,输出则是对于每一对B和N,找到的最接近B的A值。

被折叠的 条评论
为什么被折叠?



