测试点2:当合法数字只有一个的时候输出语句是
The average of 1 number is …
其中number没有s
#include <bits/stdc++.h>
using namespace std;
bool judge(string num){
int pointflag=0;//是否已经出现小数点
int pointlen=0;//小数点后位数长度,最大2位
if(num[0]=='-') ;//如果第一位出现负号,没问题
for(int i=1;i<num.length();i++){
if((num[i]<'0'||num[i]>'9')&&num[i]!='.') return false;//检测是否出现非数字和非小数点
if(num[i]=='.'){
if(pointflag==1) return false;//如果已经出现小数点,那么不能再出现第二次
pointflag=1;
}
if(pointlen>2) return false;//如果小数位数超过2,非法
if(pointflag==1){
pointlen++;
}
}
//以上都没问题的话,证明是个实数,接下来判断其是否超出限定范围
double temp=stof(num);
if(temp>1000||temp<-1000)
return false;
return true;
}
int main(){
int N;
cin>>N;
string num;
double sum=0;//求和
int validcnt=0;//合法数字数量
double temp;//合法数字暂存转换值
while(N--){
cin>>num;
if(judge(num))
{
temp=stof(num);
sum+=temp;
validcnt++;
}
else
{
printf("ERROR: %s is not a legal number\n",num.c_str());
}
}
if(validcnt==0)
{
printf("The average of 0 numbers is Undefined");
}
else if(validcnt==1)
{
printf("The average of 1 number is %.2f",sum);
}
else{
printf("The average of %d numbers is %.2f",validcnt,sum/(validcnt*1.0));
//cout<<"sum:"<<sum<<endl;
//cout<<"res:"<<sum/validcnt;
}
}