pat 1108. Finding Average (20)

来源:互联网 发布:软件教育 编辑:程序博客网 时间:2024/05/23 01:59

https://www.patest.cn/contests/pat-a-practise/1108

笨方法:

#include <cstdio>#include <iostream>#include <string>using namespace std;bool to2Doboule(string s, double &f) {double res = 0.0;int i = 0;if (s[i] == '-') i++;int len = s.length();while ('0' <= s[i] && s[i] <= '9'&&i < len) {res *= 10;res += s[i] - '0';i++;}if (s[i] == '.') {i++;if (len - i > 2) return false;double base = 10;while ('0' <= s[i] && s[i] <= '9' && i < len) {res += (s[i] - '0') / base;base *= 10;i++;}if (i != len) return false;f = s[0] == '-' ? -res : res;return true;}else if(i==len) {f = s[0] == '-' ? -res : res;return true;}else {return false;}}int main(){int n, count = 0;double sum = 0.0;string a;scanf("%d\n", &n);for (size_t i = 0; i < n; i++){cin >> a;double res;if (to2Doboule(a, res)&& res >= -1000 && res <= 1000 ) {//printf("%.2lf\n",res);count++;sum += res;}else {printf("ERROR: %s is not a legal number\n", a.c_str());}}if (count == 1) {printf("The average of 1 number is %.2lf\n", sum);}else if (count > 1) {printf("The average of %d numbers is %.2lf\n", count, sum / count);}else {printf("The average of 0 numbers is Undefined\n");}return 0;}


利用strtod http://blog.csdn.net/line290/article/details/53496482

#include <iostream>  #include <string>  #include <cstdlib>  using namespace std;  int main(){      int n,cnt = 0;      cin>>n;      string num;      double sum = 0.0;      for(int i=0;i<n;i++){          cin>>num;          char * pos;          double value = strtod(num.c_str(),&pos);          bool ok = true;          if(*pos != '\0')ok = false;          if(value<-1000 || value >1000)ok = false;          int lpos = num.find_last_of(".");          if(lpos != string::npos) if(num.size() - lpos > 3)ok = false;          if(ok){              cnt++;              sum += value;          }          else              printf("ERROR: %s is not a legal number\n",num.c_str());      }      if(cnt != 0){          if(cnt != 1)printf("The average of %d numbers is %.2lf\n",cnt,sum/cnt);          else printf("The average of 1 number is %.2lf\n",sum);      }      else cout<<"The average of 0 numbers is Undefined\n";      return 0;  }  


利用sscanf,sprinf的方法http://www.liuchuo.net/archives/1924

#include <iostream>#include <cstdio>#include <string.h>using namespace std;int main() {    int n, cnt = 0;    char a[50], b[50];    double temp, sum = 0.0;    cin >> n;    for(int i = 0; i < n; i++) {        scanf("%s", a);        sscanf(a, "%lf", &temp);        sprintf(b, "%.2lf",temp);        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 average of 1 number is %.2lf", sum);    } else if(cnt > 1) {        printf("The average of %d numbers is %.2lf", cnt, sum / cnt);    } else {        printf("The average of 0 numbers is Undefined");    }    return 0;}


0 0
原创粉丝点击