问题的根
Time Limit: 1000 ms Memory Limit: 128 MB
问题描述
给定正整数x和n,找出一个整数y,使得y^n最接近x,注意y^n可能小于、等于或者大于x
输入描述
有多组测试数据,每组测试数据是由空格分隔的两个正整数x(1<=x<=1000000)和n(1<=n<=9),当x和n都为0时表示输入的结束。
输出描述
每组测试数据输出一行,即找出的满足要求的整数y。
样例输入
4 3
5 3
1000000 5
0 0
样例输出
1
2
16
#include <stdio.h>
#include <math.h>
int main() {
int x, n;
while (scanf("%d%d", &x, &n) == 2 && x != 0 && n != 0) {
int y = pow(x, 1.0 / n); // 取整数部分
int a = pow(y, n); // y^n
int b = pow(y + 1, n); // (y+1)^n
if (x - a <= b - x) { // 判断哪个更接近x
printf("%d\n", y);
} else {
printf("%d\n", y + 1);
}
}
return 0;
}
思路:枚举y的值,计算y^n与x的差值,找到最小的差值对应的y即可。
注意:y的取值范围为[1, x],n的取值范围为[1, 9],因此y^n的取值范围为[1, x^9],可能会超出int类型的范围,需要使用long long类型。