题目
![]()
解法1
点击查看代码
#include <iostream>
#include <vector>
using namespace std;
// 检查字符串是否是合法数字
bool isLegal(const string& s) {
int len = s.length();
bool hasDot = false;
int dotPos = -1;
// 允许负号但必须在首位
int start = (s[0] == '-') ? 1 : 0;
if (start == len) return false; // 只有一个 '-',非法
for (int i = start; i < len; i++) {
if (s[i] == '.') {
if (hasDot) return false; // 不能有多个小数点
hasDot = true;
dotPos = i;
} else if (s[i] < '0' || s[i] > '9') {
return false; // 只能包含数字或单个小数点
}
}
// 小数点后不能超过两位
if (hasDot && (len - dotPos - 1 > 2)) return false;
// 转换为数值范围检查
double value = stod(s);
if (value < -1000 || value > 1000) return false;
return true;
}
int main() {
int n;
cin >> n;
vector<double> validNumbers;
string input;
for (int i = 0; i < n; i++) {
cin >> input;
if (isLegal(input)) {
validNumbers.push_back(stod(input)); // 转换为 double
} else {
cout << "ERROR: " << input << " is not a legal number" << endl;
}
}
// 计算平均值
int cnt = validNumbers.size();
if (cnt==0) {
cout << "The average of 0 numbers is Undefined" << endl;
} else {
double sum = 0;
for (double num : validNumbers) sum += num;
double avg = sum / validNumbers.size();
if (cnt == 1) {
printf("The average of %d number is %.2f",cnt,avg);
} else {
printf("The average of %d numbers is %.2f",cnt,avg);
}
}
return 0;
}