- 首先是核心得二分法。
- 其次,如果是负数,需要先变成正数。
- 再其次,不管是正数还是负数,只要绝对值小于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;
}
京公网安备 11010502036488号