题意: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 ",a2); else printf("%d ",a1); } return 0; }