题目描述
基本任务非常简单:给定 N 个实数,请你计算它们的平均值。
但是令事情变得复杂的是,某些输入数字可能不合法。
合法输入数字指 [−1000,1000] 范围内的精确到不超过 2 个小数位的实数。
在计算平均值时,不得将这些非法数字计算在内。
输出格式
基本任务非常简单:给定 N 个实数,请你计算它们的平均值。
但是令事情变得复杂的是,某些输入数字可能不合法。
合法输入数字指 [−1000,1000] 范围内的精确到不超过 2 个小数位的实数。
在计算平均值时,不得将这些非法数字计算在内。
样例
输入样例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
算法
利用sscanf将字符串读入一个double的数据型,然后用sprintf将此浮点数保留两位小数输出到一个字符串中 判断二者是否相等即可
C++ 代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,cnt=0;cin>>n;
char a[50],b[50];
double temp,sum=0.0;
for(int i=0;i<n;i++)
{
scanf("%s",a);
sscanf(a,"%lf",&temp);//将读入的a中的字符串中的实数(字母除外)以浮点数的形式写到temp中(sscanf是从左到右)
sprintf(b,"%.2f",temp); //将temp字符串中的实数以保留俩位小数的形式输入b中(从右到左)
int flag=0;
for(int j=0;j<strlen(a);j++)
if(a[j]!=b[j]) flag=1;
if(flag || temp<-1000 ||temp>1000)
{
printf("ERROR;%s is not a legal number\n",a);
continue;
}
else
{
sum+=temp;
cnt++;
}
}
if(cnt==1)
{
printf("The avarage of 1 number is %.2f",sum);
}
if(cnt>1)
{
printf("The avarage of %d number is %.2f",cnt,sum/cnt);
}
else
{
printf("The average of 0 numbers is Undefined");
}
return 0;
}