By
yusijia
Updated:
题目大意:
找x的x次方大于10,求x的近似值,,要求精确到小数点后第6位(有四舍五入)
分析:
- 用二分查找
- 区间不是离散的点,而是连续的点,所以不能r=x-1,l=x+1而改为r=x,l=x
- 注意pow函数里的参数是double型的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #include <cstdio> #include <iostream> #include <cstdlib> #include <algorithm> #include <vector> #include <cmath> #include <cstring> #include <cctype> #include <climits> using namespace std;
int main() { double l = 1.0, r = 10.0; double x; while(1){ x = (l + r) / 2; double n = pow(x, x); if(fabs(n - 10) <= 1e-7 && n > 10) break; else if(n > 10) r = x; else if(n < 10) l = x; } printf("%.7f", x);
return 0; }
|