求平均值

发布时间 2023-09-20 18:35:24作者: gao79138

求平均值

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;
}