PAT乙1054求平均值 題目描述 關於輸出格式 看清楚 老實複製每一個為上

NO IMAGE
1054 求平均值 (20)(20 分)
本題的基本要求非常簡單:給定N個實數,計算它們的平均值。但複雜的是有些輸入資料可能是非法的。一個“合法”的輸入是[-1000,1000]區間內的實數,並且最多精確到小數點後2位。當你計算平均值的時候,不能把那些非法的資料算在內。
輸入格式:
輸入第一行給出正整數N(<=100)。隨後一行給出N個實數,數字間以一個空格分隔。
輸出格式:
對每個非法輸入,在一行中輸出“ERROR: X is not a legal number”,其中X是輸入。最後在一行中輸出結果:“The average of K numbers is Y”,其中K是合法輸入的個數,Y是它們的平均值,精確到小數點後2位。如果平均值無法計算,則用“Undefined”替換Y。如果K為1,則輸出“The average of 1 number is Y”。
輸入樣例1:
7
5 -3.2 aaa 9999 2.3.4 7.123 2.35
輸出樣例1:
ERROR: aaa is not a legal number
ERROR: 9999 is not a legal number
ERROR: 2.3.4 is not a legal number
ERROR: 7.123 is not a legal number
The average of 3 numbers is 1.38
輸入樣例2:
2
aaa -9999
輸出樣例2:
ERROR: aaa is not a legal number
ERROR: -9999 is not a legal number
The average of 0 numbers is Undefined
  • 注意K=1時 輸出是number不是numbers ! 每次都想當然覺得看到的是那樣;
  • ‘-’ 只可能出現在第一位
  • ‘.’只能出現一次
  • 數a屬於[-1000,1000]
#include<iostream>
#include<cstdio>
using namespace std;
int n,K=0;
string t;
double a,c,res=0;
bool point,wrong;
int Minus,num;
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i  )
{
cin>>t;
//judge
int l=t.length();
a=0;c=1;
point=0;Minus=1;wrong=0;num=0;
for(int j=0;j<l;j  )
{
if(t[j]>='0'&&t[j]<='9')
{
if(!point)
a=a*10 (t[j]-'0');
else
{
if(num==2)
{
wrong =1;break;
}
num  ;
c*=0.1;
a=a c*(t[j]-'0');
}
}
else if(t[j]=='-'&&j==0)
{
Minus=-1;
}
else if(t[j]==' '&&j==0)
{
Minus=1;
}
else if(t[j]=='.'&&!point)
{
point=1;
}
else
{
wrong=1;
break;
}
}
if(a<-1000||a>1000)wrong=1;
if(!wrong)
{
res =(Minus*a);
K  ;
}
else
{
cout<<"ERROR: "<<t<<" is not a legal number"<<endl;
}
}
if(K==1)printf("The average of 1 number is %.2f\n",res);///////
else if(K)printf("The average of %d numbers is %.2f\n",K,res/K);
else printf("The average of 0 numbers is Undefined\n");
return 0;
}