poj3100---求根问题

题意:a的n方=b,a这个整数与b开n方的值相近,分别向上取整和向下取整,同时n方,b一定介于这两个整数之间,然后比较这两个数与b的距离,取最近的

收获:c++的cei和floor函数在c中的向上取整和向下取整函数为:

double a;(int)a   --向下取整     (int)a+1     ---向上取整

注意:c里面的pow,如3的4次方根   pow(3,1.0/4),不加.0就变成3的0次方

还有,c里面的pow原型double pow(double x, double y);

x和y放整数都应该无所谓 pow(7,3)=343.0000000,会被强制转换

int a,b;  pow(a,b)  加上double是为了增加可读性

#include <stdio.h>
#include <stdlib.h>
#include<math.h>

int main()
{
    int b,n,d1,d2,a1,a2;
    double ans;
    while(scanf("%d %d",&b,&n) != EOF && !(b==0 && n==0))
    {
        ans = pow(b,1.0/n);//这里一定要写1.0
        a1 = (int)ans;
        a2 = (int)(ans+1);
        d1 = abs((int) pow( a1, n) - b);//abs还是用于整数的绝对值以后类型转换后面的四则运算就不加括号了,不影响
        d2 = (int)pow( a2, n) - b;
        if(d1 > d2)
            printf("%d\n",a2);
        else
            printf("%d\n",a1);
    }
    return 0;
}
View Code

 

posted @ 2015-06-20 14:15  Gabyler  阅读(236)  评论(0编辑  收藏  举报