题解 | 求解立方根
#include <complex> #include <iomanip> #include <iostream> using namespace std; int main() { double num; cin >> num; double low,high,mid; double epsilon = 0.01;//精度 //划分求解区间 if(num <= -1){ low = num; high = 0; } else if(num >= 1){ low = 0; high = num; } else if(num > -1 && num <0){ low = -1; high = 0; } else{ low = 0; high = 1; } //对求解区间迭代缩小 while(high - low > epsilon){ mid = (high + low) / 2; double midcube = mid * mid * mid; if(std::abs(midcube - num) < epsilon * epsilon){ break; } if(midcube < num){ low = mid; } else{ high = mid; } } double result = (high + low) / 2;//求得的解 cout << fixed << setprecision(1) << result ; //对输出进行四舍五入 }
注意,先对求解区间进行划分,绝对值大于1 的求解区间是0~本身 这个区间,但是对于绝对值小于1的数,求解区间是0~1