求立方根(C/C++ 注释详解)
题目
输入一个整数n,计算它的立方根(结果保留三位小数)
数据范围(-10000 <= n <= 10000)
输入格式:
8
输出格式:
2.000
输入格式:
-8
输出格式:
-2.000
一、思路一(pow函数)
1.关于pow函数
众所周知,pow函数是C语言中<math.h>库中的数学函数。
作用:求x的y次方
格式:pow(x, y)
注意:这里底数x不能为负数
由于pow函数中底数x不能为负数,则这个思路是不能解这个题的。但可以求正数的立方根,n的立方根也就是n的1/3次方-----pow(n, 1/3)。
2.代码实现
//只能求正数的立方根
#include<stdio.h>
#include<math.h>
int n; //整数n
double ans; //存答案的变量
int main()
{
scanf("%d", &n);
ans = pow(n, 1.0/3);
//1/3 = 0
//1.0/3 = 0.333...
//我们这里1/3是浮点型数据所以要转换一下
printf("%.3lf", ans);
return 0;
}
二、思路二(二分算法)
1.二分算法
关于二分算法,可分为整数二分和浮点数二分(注意:二分算法一般都是答案的二分),其中整数二分比浮点数二分复杂一些,是由于浮点数二分能严格意义上分成两半,不会有整数涉及的整除问题和边界问题。
如图所示是浮点数二分的图解(可以结合代码注释看):
2.代码实现
#include<stdio.h>
int n; //整数n
int main()
{
scanf("%d", &n);
double l = -10000, r = 10000; //答案二分的左右边界,在这个区间找答案
//注意浮点数二分必须得考虑精度
for(int i = 0; i < 100; i ++) //循环二分100次精度在6位
{
double mid = (l + r) / 2; //二分答案区间
if(mid * mid * mid > n) r = mid; //答案大了,更新右边界
else l = mid; //反之更新左边界
}
printf("%. 3lf", r); //最后输出l或者r都可以,到最后l和r的值是一样的
return 0;
}
码字不易,阁下的关注和点赞是给作者最大的动力和鼓励 ૮₍ ˃ ⤙ ˂ ₎ა