没有用sscanf和sprintf
因为可能会出现字符
第三个测试点刚开始过不了,原因是以为只有一位合法数字时,不用精确到小数点后两位,,其实是想说明numbers后边没有s
是c_str
#include<bits/stdc++.h>
using namespace std;
string s[101];
double islegal(int id){
double num=0;
int sign=0,op=0;
for(int i=0;i<s[id].length();i++){
if(s[id][i]>='0'&&s[id][i]<='9'&&sign==0){
num=num*10+(s[id][i]-'0');
}
else if(s[id][i]=='.')
sign++;
else if(s[id][i]>='0'&&s[id][i]<='9'&&sign!=0){
int j=0;
j=pow(10,sign);
num=num+double((s[id][i]-'0'))/j;
sign++;
}
else if(s[id][i]=='-'){
if(i==0)
op=1;
else
return 1001;
}
else
return 1001;
}
if(num>1000||num<-1000)
return 1001;
if(sign>3)
return 1001;
if(op==1)
num=-num;
return num;
}
int main(){
int n,k=0;
double sum=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>s[i];
}
for(int i=0;i<n;i++){
double temp;
temp=islegal(i);
if(temp==1001)
cout<<"ERROR: "<<s[i]<<" is not a legal number"<<endl;
else{
sum+=temp;
k++;
}
}
if(k>1)
printf("The average of %d numbers is %.2lf\n",k,sum/k);
else if(k==0)
cout<<"The average of 0 numbers is Undefined"<<endl;
else
printf("The average of 1 number is %.2lf\n",sum);
return 0;
}