1 条题解
-
0
自动搬运
来自洛谷,原作者为

StarLinkOvO
Now today I know what I am doing搬运于
2025-08-24 22:13:41,当前版本为作者最后更新于2025-05-10 16:06:42,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
P5714 【深基 3. 例 7】肥胖问题
题目简述
给出 BMI 指数计算公式:,其中 是指体重(千克), 是指身高(米)。
判定结果如下:- 小于 :体重过轻,输出
Underweight; - 大于等于 且小于 :正常体重,输出
Normal; - 大于等于 :肥胖,不仅要输出 BMI 值(使用
cout的默认精度),然后换行,还要输出Overweight;
现有 和 ,按要求输出结果。
注:结果应保留六位有效数字。思路
题目已经给出了计算公式,我们可以直接套用公式,不过结果保留六位有效数字可能吓到大家了。
其实没有那么复杂。
首先,有效数字是指从第一个非零数字开始计算的位数,而非小数点后的位数。
在 C++ 中,用
cout输出double类型的数字会自动保留六位有效数字,然后我们就可以轻松写出代码啦!代码
#include <bits/stdc++.h> using namespace std; int main() { double z,m,h; cin >> m >> h; z = (m /(h * h)); if (z < 18.5) cout << "Underweight"; else if (z >= 18.5 && z < 24) cout << "Normal"; else cout << z << endl << "Overweight"; return 0; }拓展
当然如果你不放心的话,C++ 中还有
fixed和setprecision这两个流操作符。它们两个连用可以控制输出的小数位数,且写一遍后面的输出都会生效,代码如下:
double a = 3.1415926, b = 11.4514; cout << fixed << setprecision(3) << a; cout << " " << b; //输出为: 3.142 11.451当
setprecision单独使用时,就可以控制输出的有效数字位数,代码如下:double a = 3.1415926, b = 11.4514; cout << setprecision(3) << a; cout << " " << b; //输出为: 3.14 11.5应用在这个题上,我们也可以这样写:
#include <bits/stdc++.h> using namespace std; int main() { double z,m,h; cin >> m >> h; z = (m /(h * h)); if (z < 18.5) cout << "Underweight"; else if (z >= 18.5 && z < 24) cout << "Normal"; else cout << setprecision(6) << z << endl << "Overweight"; return 0; }
完结撒花!
话说要不是写这篇题解我都不知道这两个函数还能这么用UPDATE
2025/5/10:修正了一处表述错误(感谢 @llamn)
- 小于 :体重过轻,输出
- 1
信息
- ID
- 4680
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 1
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 上传者