题目链接
题目描述
给定感染某种病毒的确诊人数和死亡人数,请计算该种病毒的死亡率。死亡率定义为 (死亡人数 / 确诊人数) * 100
。
输入描述: 输入一行两个整数,分别表示确诊人数和死亡人数。
输出描述:
输出死亡率,以百分数形式表示,结果保留小数点后三位,并在末尾加上百分号 %
。
解题思路
本题的核心是进行浮点数除法运算,并按特定格式输出。
- 读取输入:读取两个整数,分别代表确诊人数和死亡人数。
- 类型转换:为了得到精确的小数结果,在进行除法运算前,必须将整数转换为浮点数(如
double
或float
)。如果直接用两个整数相除,结果会被截断为整数,导致精度丢失。 - 计算比率:用浮点数形式的死亡人数除以确诊人数,然后乘以 100,得到百分比数值。
- 格式化输出:将计算结果格式化为保留三位小数的字符串,并在末尾拼接上
%
符号。
代码
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double confirmed, deaths;
// 读取两个数
cin >> confirmed >> deaths;
// 计算死亡率百分比
double rate = (deaths / confirmed) * 100;
// 设置输出格式为固定小数点,保留三位,然后输出结果和百分号
cout << fixed << setprecision(3) << rate << "%" << endl;
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 使用 double 类型读取以保证后续计算精度
double confirmed = sc.nextDouble();
double deaths = sc.nextDouble();
// 计算死亡率
double rate = (deaths / confirmed) * 100;
// 使用 printf 格式化输出,%.3f 表示保留三位小数的浮点数,%% 表示输出一个 '%'
System.out.printf("%.3f%%", rate);
}
}
# 读取输入并转换为浮点数
confirmed, deaths = map(float, input().split())
# 计算死亡率
rate = (deaths / confirmed) * 100
# 使用 f-string 格式化输出,并添加 '%'
print(f"{rate:.3f}%")
算法及复杂度
- 算法:浮点数运算与格式化输出。
- 时间复杂度:
- 仅包含常数时间的计算和I/O操作。
- 空间复杂度:
- 仅需常数空间存储输入变量。