超级传送门:
http://acm.hdu.edu.cn/showproblem.php?pid=2740
题目大意:
给出B,N,求A,使得A^N最接近B ,不论大于或者小于
题目分析:
题目很好做,就是求出B的N次方根,分别向上取整和向下取整,看看那个更适合。
但是怎么实现捏?
pow(a,b)//求a^b,floor(a)//求a向下取整,ceil(a)//求a向上取整, 这几个函数帮上大忙了。。
由pow(a,b)//求a^b,得pow(a,1.0/b)//就是求a的b次方根了。。
于是代码秒杀了:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int B,N;
double temp;
int a1,a2;
while(scanf("%d %d",&B,&N) != EOF)
{
if(B==0 && N==0) break;
temp = pow(B+0.0,1.0/N);
a1 = floor(temp);
a2 = ceil(temp);
if((B-pow(a1,N)) > (pow(a2,N) - B))
{
printf("%d\n",a2);
}
else
{
printf("%d\n",a1);
}
}
return 0;
}