1108. Finding Average (20) 字符处理

来源:互联网 发布:成都云计算公司排名 编辑:程序博客网 时间:2024/05/01 03:25

题目地址

https://www.patest.cn/contests/pat-a-practise/1108

ac

#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <iostream>#include <string>#include <vector>#include <queue>#include <algorithm>#include <sstream>#include <list>#include <stack> #include <map> #include <set> #include <iterator> #include <unordered_map>using namespace std;const int INF = 0x7fffffff;typedef long long int LL;const int N = 1000 + 5;int n;bool isLegal(string s, double &d){  int len = s.size();  int dotCnt = 0;  int dotAfter = 0;  for(int i=0;i<len;i++)  {    if(s[i] == '.')    {      dotCnt ++;      if(dotCnt > 1)        return false;    }else if(s[i] == '-' || s[i] == '+')    {      if(i != 0)        return false;    }else if(s[i] >= '0' && s[i] <= '9')    {      if(dotCnt == 1)      {        dotAfter ++;        if(dotAfter > 2)          return false;      }    }else{      return false;    }  }  stringstream ss;  ss << s;  ss >> d;  if( d >= -1000.00 && d <= 1000.00)    return true;  return false;}int main(){  //freopen("in.txt", "r" , stdin);  while(scanf("%d", &n) != EOF)  {    int legalCnt = 0;    double ans = 0.0;    for(int i=0;i<n;i++)    {      string tmp;      cin >> tmp;      double d;      bool flag = isLegal(tmp, d);      if(flag)      {        legalCnt ++;        ans += d;      }else{        cout << "ERROR: " << tmp << " is not a legal number" << endl;      }    }    if(legalCnt == 0)    {      cout << "The average of 0 numbers is Undefined" << endl;    }else if(legalCnt == 1)    {      printf("The average of 1 number is %.2lf\n", ans);    }else{      printf("The average of %d numbers is %.2lf\n", legalCnt, ans / (1.0*legalCnt));    }    //printf("\n");  }  return 0;}
0 0
原创粉丝点击