P5714 肥胖问题
题目描述
BMI 指数是国际上常用的衡量人体胖瘦程度的一个标准,其算法是 m/h2(40≤m≤120,1.4≤h≤2.0),其中 m是指体重(千克),h是指身高(米)。不同体型范围与判定结果如下:
- 小于 18.5:体重过轻,输出
Underweight
; - 大于等于 18.5 且小于 24:正常体重,输出
Normal
; - 大于等于 24:肥胖,不仅要输出 BMI 值(使用 cout 的默认精度),然后换行,还要输出
Overweight
;
现在给出体重和身高数据,需要根据 BMI 指数判断体型状态并输出对应的判断。
对于非 C++ 语言,在输出时,请四舍五入保留六位有效数字输出,如果小数部分存在后缀 00,不要输出后缀 00。
请注意,保留六位有效数字不是保留六位小数。例如 114.5149应该输出为 114.515,9198.10 应该输出为 9198.1。
题解
题目本身不难,但这里涉及到两个点,一个是java取有效数字这里使用了BigDecimal实现的取有效数字,链接:BigDecimal取有效数字方法,另一个是当尾数全是0时,不输出。
import java.math.BigDecimal;
import java.math.MathContext;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Double m = scan.nextDouble(),h = scan.nextDouble();
scan.close();
List<Object> list = new LinkedList<>();
Double BMI = m / Math.pow(h, 2);
if(BMI>=24) {
//MathContext()设置BigDecimal运算的精度,使用将Double转为BigDecimal类型并将其除以1设置精度。
char []bmi =new BigDecimal(String.valueOf(BMI)).divide(BigDecimal.ONE, new MathContext(6)).toString().toCharArray();
int flag = 1;
for(int i=6;i>=0;i--) { //重后往前遇到第一个非0数开始输出,满足去0要求
if(bmi[i]=='0'&& flag==1) {
continue;
}
flag = 0;
list.add(bmi[i]);
}
Collections.reverse(list); //列表反转
for(Object i:list) { //输出
System.out.print(i);
}
System.out.println();
System.out.println("Overweight");
}else if(BMI>=18.5 && BMI<24) {
System.out.println("Normal");
}else {
System.out.println("Underweight");
}
}
}