一直有两个测试点过不了也是怪,就不知道哪错了。
The basic task is simple: given N real numbers, you are supposed to calculate their average. But what makes it complicated is that some of the input numbers might not be legal. A legal input is a real number in [−1000,1000] and is accurate up to no more than 2 decimal places. When you calculate the average, those illegal numbers must not be counted in.
Each input file contains one test case. For each case, the first line gives a positive integer N (≤100). Then N numbers are given in the next line, separated by one space.
For each illegal input number, print in a line ERROR: X is not a legal number where X is the input. Then finally print in a line the result: The average of K numbers is Y where K is the number of legal inputs and Y is their average, accurate to 2 decimal places. In case the average cannot be calculated, output Undefined instead of Y. In case K is only 1, output The average of 1 number is Y instead.
#include "pch.h" #include <iostream> #include<string.h> #include<stdio.h> #include<iomanip> #include<vector> #include<string> #include<algorithm> #include<queue> #include<map> #include<math.h> using namespace std; double judge(string s) { int flag = 1; int len = s.length(); double res; for (int i = 0; i < len; i++) { if(i==0&&(s[i]=='-'||s[i]=='+')) continue; if (s[i] == '.'&&flag) { flag = 0; if (len - i >3) return 0; } else if (s[i]<'0' || s[i]>'9') return 0; } res=stod(s);//string转化为double //cout << res << "res" << endl; if (res < -1000 || res>1000) return 0; else return res; } int main() { int n; cin >> n; double sum = 0; int num = 0; string a; double m ; for (int i = 0; i < n; i++) { cin >> a; m = judge(a); if (m) { sum += m; num++; } else cout << "ERROR: " << a << " is not a legal number" << endl; } if (num == 0) cout << "The average of 0 numbers is Undefined" << endl; else if (num == 1) cout << "The average of 1 number is " << fixed << setprecision(2) << sum<< endl; else cout << "The average of " << num << " numbers is " << fixed << setprecision(2) << sum / num << endl; }