PAT 甲级:1108. Finding Average

来源:互联网 发布:火影忍者抄袭知乎 编辑:程序博客网 时间:2024/06/06 01:15

这题的主要难点在于考虑所有非法数字的情况。

#include<cstdio>#include<iostream>#include<iomanip>#include<algorithm>#include<vector>#include<queue>#include<string.h>#include<stack>#include<string>#include<math.h>using namespace std;const int maxn=1001;bool islegal(string s){//+-号,多个小数点,小数点后面位数过多,包含其他字母int pos=0;if(s[pos]=='-') pos++;if(pos==s.length()) return false;//只有一个负号int cnt=0;//记录小数点的个数for(int i=pos;i<s.length();i++){if(s[i]=='.'){cnt++;if(cnt>1) return false;if(s.length()-1-i>2) return false;}else if(s[i]<'0'||s[i]>'9') return false;}double d;sscanf(s.c_str(),"%lf",&d);if(d<-1000||d>1000) return false;return true;}int main(){int n;cin>>n;double sum=0;int cnt=0;for(int i=0;i<n;i++){string s;cin>>s;if(islegal(s)){double d;sscanf(s.c_str(),"%lf",&d);sum+=d;cnt++;}else{cout<<"ERROR: "<<s<<" is not a legal number"<<endl;}}if(cnt==0){cout<<"The average of 0 numbers is Undefined"<<endl;}else if(cnt==1){cout<<"The average of 1 number is "<<fixed<<setprecision(2)<<sum/cnt<<endl;}else{cout<<"The average of "<<cnt<<" numbers is "<<fixed<<setprecision(2)<<sum/cnt<<endl;}return 0;}

0 0
原创粉丝点击