开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 19 天,点击查看活动详情
强制类型转换
例 2-3 玩橡皮泥。
小 A 有两块球形橡皮泥,一个半径是 ,另一个半径是 。他想把这两块橡皮泥揉在一起,然后塑造成一个正方体。请问:这个正方体的边长是多少?如果结果不是整数,则舍去小数点之后的数字。取。
分析:
- 已知球半径求体积的公式:
- 因此,总橡皮泥的体积:
- 因为正方体的边长就是体积的立方根,所以答案为:
代码如下:
#include <bits/stdc++.h>
using namespace std;
#define PI 3.141593
int main() {
int r1 = 4, r2 = 10;
double V, ans;
V = 4.0 / 3 * PI * (r1*r1*r1 + r2*r2*r2);
ans = pow(V, 1.0 / 3);
cout << (int)ans;
return 0;
}
运行结果为:
16
可以看到,上述代码中,使用了 pow() 函数来计算立方根,得到正方体边长的准确数值,而在输出答案的过程中,使用了强制类型转换的方法来将一个浮点数 ans 转变为整数,即舍去小数点之后的数字。
当然,就本题而言,我们也可以将 ans 定义为 int 类型,这样当 pow() 函数计算完之后赋值给整数变量 ans 后就会自动转换为整数(代价是失去小数点之后的数字)。
之前记录过如何将整数转换为浮点数(加
.0或者乘上1.0),如果是通过强制类型转换的方式,则是使用(double)3也能达到转变为浮点数的效果。
四舍五入
例 2-4 销量预测。
根据咕咕网校的预测,当课程定价为 110 元时,会有 10 人报名。如果课程价格每降低 1 元,就会多 1 名报名者,反之亦然。如果希望总共能收到 3500 元学费,那么应该定价多少呢?已知本题有两个答案符合要求,则取较小的那一个。如果这个答案不是整数,则需四舍五入精确到整数。
分析:
- 假设课程价格降低 元,那么定价就是 元,报名人数是 人
- 可以列出公式:
- 化简得:$x^2-100x+2400=0
- 根据二次方程求根公式:
- 最后再取值较大的那个根即可。
代码如下:
#include <bits/stdc++.h>
using namespace std;
int main() {
double a = 1, b = -100, c = 2400;
double d, ans;
d = pow(b, 2) - 4 * a * c;
ans = ( -b + sqrt(d) ) / ( 2 * a );
cout << 110 - int(ans + 0.5);
return 0;
}
运行结果:
50
在上述代码中,ans = ( -b + sqrt(d) ) / ( 2 * a )其实就是求根公式,其中 d 就是
注意,这里的 int(ans + 0.5) 的意思就是四舍五入到整数,将 ans 加上0.5之后再进行强制类型转换为 int,去除小数部分,就可以达到四舍五入的目的。