PAT–1108 Finding Average
- 题目描述
- 代码
简单的复杂题(没啥算法,就是麻烦),直接上代码
#include<iostream>
#include<iomanip>
using namespace std;
double number;
//判断字符串是否合法
bool Is_Illegal(string s){
int index = 0 ;
int flag = 1;//正负
int f = 0;
int inter = 0;
int decimal = 0;
int decicnt = 0;//记录小数位数
if(s[0] == '-' || s[0] >= '0' && s[0] <= '9'){
if(s[0] == '-'){
flag = -1;
index++;
}
while(index < s.length()){
if((s[index] >= '0' && s[index] <= '9')&&!f){//整数部分
inter = inter * 10 + s[index] - '0';
}
else if(!f && s[index] == '.'){
f = 1;//转到小数部分
}
else if((s[index] >= '0' && s[index] <= '9') && f){//小数部分
if(decicnt == 2){
return false;
}
decimal = decimal * 10 + s[index] - '0';
decicnt++;
}
else{
return false;
}
index++;
}
}
else{
return false;
}
number = decimal;
while(decicnt > 0){
number = number * 0.1;
decicnt--;
}
number = number + inter;
number = flag * number;
if(number > 1000 || number < -1000)
return false;
return true;
}
int main(){
int N;
cin>>N;
double sum = 0;
double ave ;
int cnt = 0;
for(int i = 0 ; i < N ; i++){
number = 0.0;
string s;
cin>>s;
if(Is_Illegal(s)){
sum += number;
cnt++;
}
else{
cout<<"ERROR: "<<s<<" is not a legal number"<<endl;
}
}
if(cnt == 0)
cout<<"The average of 0 numbers is Undefined"<<endl;
else if(cnt == 1){
cout<<"The average of 1 number is "<<fixed<<setprecision(2)<<sum<<endl;
}
else{
ave = sum * 1.0 / cnt;
cout<<"The average of "<<cnt<<" numbers is "<<fixed<<setprecision(2)<<ave<<endl;
}
}