题解 | #求解立方根#
求解立方根
https://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
double a;
double i, j;
scanf("%lf", &a);
if (a - 8.0 < 0.0) {
if (a < 1.0)
for (i = 0.1; i < 1.0; i = i + 0.1) {
j = i + 0.1;
if (a > i * i * i && a < j * j * j) {
if (a - i * i * i < j * j * j - a)
printf("%.1f", i);
else
printf("%.1f", j);
}
} else
for (i = 1.1; i < 2.0; i = i + 0.1) {
j = i + 0.1;
if (a > i * i * i && a < j * j * j) {
printf("%.1f", i);
}
}
} else
for (i = 2.1; i * i * i < 20.0; i = i + 0.1) {
j = i + 0.1;
if (a > i * i * i && a < j * j * j) {
if (a - i * i * i < j * j * j - a)
printf("%.1f", i);
else
printf("%.1f", j);
}
}
if (a + 8.0 > 0.0) {
if (a > -0.1)
for (i = -0.1; i > -1.0; i = i - 0.1) {
j = i - 0.1;
if (a < i * i * i && a > j * j * j) {
if (a - i * i * i > j * j * j - a)
printf("%.1f", i);
else
printf("%.1f", j);
}
} else
for (i = -1.1; i > -2.0; i = i - 0.1) {
j = i - 0.1;
if (a < i * i * i && a > j * j * j) {
printf("%.1f", i);
}
}
} else
for (i = -2.1; i * i * i > -20.0; i = i - 0.1) {
j = i - 0.1;
if (a < i * i * i && a > j * j * j) {
if (a - i * i * i > j * j * j - a)
printf("%.1f", i);
else
printf("%.1f", j);
}
}
}
求解立方根首先判断输入的数的范围,分为正数和负数,正数以0.1、1.0、8.0作为分界点,同理负数以-0.1、-1.0、-8.0作为分界点,然后立方根之间相差0.1,将前后两个立方根的3次方与输入的数进行做差,取差值最小的立方根作为所求解即可。
#牛客创作赏金赛##求解立方根#