【题目链接】
ybt 1398:短信计费
OpenJudge NOI 1.12 02:短信计费
【题目考点】
1. 函数
2. <cmath>中的取整函数
- 向上取整 :
double ceil(double x);
- 向下取整 :
double floor(double x);
- 四舍五入取整 :
double round(double x);
【题解代码】
解法1:写函数求特定字数短信的费用
#include<bits/stdc++.h>
using namespace std;
double price(int num)//求字符数量为num的短信的费用
{
if(num % 70 == 0)//如果字符数量是70的整数倍
return num / 70 * 0.1;//有num/70条短信
else//如果字符数量不是70的整数倍
return (num / 70 + 1) * 0.1;//有num/70+1条短信
}
int main()
{
int n, num;
cin >> n;
double sum = 0;//总费用
for(int i = 0; i < n; ++i)
{
cin >> num;
sum += price(num);
}
cout << fixed << setprecision(1) << sum;
return 0;
}
解法2:使用向上取整ceil函数
短信条数即为 ⌈ 字 数 / 70 ⌉ \lceil 字数/70 \rceil ⌈字数/70⌉
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, num;
cin >> n;
double sum = 0;//总费用
for(int i = 0; i < n; ++i)
{
cin >> num;
sum += ceil((double)num/70)*0.1;//注意做类型转换,保证进行实数除法
}
cout << fixed << setprecision(1) << sum;
return 0;
}