1398:短信计费
【题目描述】
用手机发短信,一条短信资费为0.1元,但限定一条短信的内容在70个字以内(包括70个字)。如果你一次所发送的短信超过了70个字,则会按照每70个字一条短信的限制把它分割成多条短信发送。假设已经知道你当月所发送的短信的字数,试统计一下你当月短信的总资费。
【输入】
第一行是整数n,表示当月发送短信的总次数,接着n行每行一个整数,表示每次短信的字数。
【输出】
输出一行,当月短信总资费,单位为元,精确到小数点后1位。
【输入样例】
10
39
49
42
61
44
147
42
72
35
46
【输出样例】
1.3
- 向上取整机制
在很多场景下,我们需要将一个数值按照一定的大小进行分组,并且要求分组的数量是向上取整的。例如,假设我们要把一些物品每 70 个分为一组,如果物品总数不能被 70 整除,那么剩下的物品也需要单独成一组。
在数学上,如果要对一个数 x 除以另一个数 y 的结果进行向上取整,可以使用公式 x/y。在 C++ 中,整数除法是向下取整的,为了实现向上取整的效果,可以使用 **(x + y - 1) / y **这个技巧。在这行代码里,y 的值是 70,所以就有 (x + 69) / 70。
#include <iostream>
#include <iomanip>
using namespace std;
void calculate(int n) {
int x;
double totalExpense = 0;
for (int i = 1; i <= n; i++) {
cin >> x;
// 计算每条短信需要的短信条数
int messageCount = (x + 69) / 70;
// 累加总资费
totalExpense += messageCount;
}
// 输出总资费,精确到小数点后 1 位
cout << fixed << setprecision(1) << 0.1 * totalExpense;
}
int main() {
int n;
cin >> n;
calculate(n);
return 0;
}

浙公网安备 33010602011771号