求平均值
1. 题目地址
https://www.acwing.com/problem/content/1600/
2. 题目解析
直接按照题意做即可。需要注意:try...catch的使用,size_t类型的使用,stof函数的使用。
3. 题解
这里不再阐述
4. 代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
//stoi -> 将字符串转换整数
//stof -> 将字符串转换成浮点数
//当stof将一个不是数字的字符串转换成浮点数时,就会报异常。此时,我们可以选择用try...catch来进行处理
int main(){
int n;
double sum = 0.0;
int cnt = 0;
scanf("%d",&n);
while(n --){
string number;
//代表该数字是合法的
bool flag = true;
double result = 0.0;
size_t bit;
cin >> number;
try{
//代表转换时,用了字符串的多少位
bit = 0;
result = stof(number,&bit);
}catch(...){ //...代表任意类型的异常
//如果转换时,出现了异常,代表该数字不合法。
flag = false;
}
//如果没全用完
//代表:类似于123.abc这种情况,此时也是不合法的
if(bit != number.size()){
flag = false;
}
//不满足范围,此时不合法
if(result < -1000 || result > 1000){
flag = false;
}
//根据小数点位置,判断是否合法
int k = number.find('.');
if(k != -1 &&number.size() - k > 3){
flag = false;
}
if(flag){
sum += result;
cnt++;
}else{
printf("ERROR: %s is not a legal number\n",number.c_str());
}
}
if(cnt > 1){
printf("The average of %d numbers is %.2lf\n",cnt,sum/cnt);
}else if(cnt == 1){
printf("The average of 1 number is %.2lf\n",sum);
}else{
printf("The average of 0 numbers is Undefined\n");
}
return 0;
}