- 首先是核心得二分法。
- 其次,如果是负数,需要先变成正数。
- 再其次,不管是正数还是负数,只要绝对值小于1,那就设置为 有边界为1.
#include<bits/stdc++.h> using namespace std; int main(){ double n; while(cin>>n){ int flag = 0; if(n<0){ n = -1*n; flag = 1; } double left = 0; double right = n>1? n:1; //如果绝对值小于1,那左边界需要设置为1 while(right-left>0.00001){//精度 double mid = (left+right)/2; if(pow(mid,3)>n){ right = mid; }else{ left = mid; } } if(flag){ right *= -1; } if(pow(round(right),3)==n){ printf("%.1f",round(right)); }else{ printf("%.1f",right); } } return 0; }