一个拖了蛮久的题……是之前一直没发现用scanf读string有问题的时候写的,找了很久是不是输出不对,后来发现应该是resize之后string的end就应该不是有效位数的结尾了。反正以后都记着只用cin读string了
今天力扣一直没刷新每日一题……
#include <bits/stdc++.h>
using namespace std;
int n;
bool isint(string str){
if(str[0]=='-') str.erase(0,1);
auto pointidx=str.find('.');
if(pointidx!=str.npos){
if(strlen(str.c_str())-pointidx>3)return false;
str.erase(pointidx,1);
}
int len=strlen(str.c_str());
if(len==0)return false;
for(int i=0;i<len;i++){
if(str[i]>'9' || str[i]<'0') return false;
}
return true;
}
int main(){
scanf("%d",&n);
vector<string> ilegal;
vector<double> valid;
for(int i=0;i<n;i++){
string str;
cin>>str;
if(isint(str)){
double val=stod(str);
if(val>1000 || val<-1000)ilegal.push_back(str);
else valid.push_back(val);
}
else ilegal.push_back(str);
}
for(int i=0;i<ilegal.size();i++){
printf("ERROR: %s is not a legal number\n",ilegal[i].c_str());
}
int cnt=valid.size();
double sum=0.0;
for(int i=0;i<cnt;i++){
sum+=valid[i];
}
if(cnt==0)printf("The average of 0 numbers is Undefined\n");
else if(cnt==1)printf("The average of 1 number is %.2lf\n",sum);
else printf("The average of %d numbers is %.2lf\n",cnt,sum/cnt);
}