当前位置: 代码迷 >> 综合 >> 1108 Finding Average (20分)
  详细解决方案

1108 Finding Average (20分)

热度:98   发布时间:2023-11-28 05:43:11.0

题目链接:1108 Finding Average (20分)

题意:

给出N个字符串,找出[-1000,1000]内的不超过两位小数的数。

题解

可以使用sscanf(str, “%lf”, t); 将str以double型赋值给t,
然后在将sprintf(a, “%.2f”, t); 在将t以两位小数的形式赋值给字符数组a
逐一比较str,a各个位上是否相等,不等则不满足题意。

代码1

#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <cctype>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
const int ERROR = -88888;
const int maxn = 100;
int change(char s[]);
int main(int argc, char** argv) {
    int n;scanf("%d", &n);getchar();char s[maxn];int  ant = 0;double t, sum;for(int j = 0; j < n; j++) {
    scanf("%s", s);char a[maxn];sscanf(s, "%lf", &t);sprintf(a, "%.2f", t);double res = t;if (strlen(s) > strlen(a) || t > 1000 || t < -1000) {
    res = ERROR;} else {
    for (int i = 0; i < strlen(s); i++)if (s[i] != a[i]) {
    res = ERROR;break;}}if (res == ERROR) {
    printf("ERROR: %s is not a legal number\n", s);} else {
    ant++;sum += res;}}if (ant == 0)printf("The average of 0 numbers is Undefined\n");else if (ant == 1)printf("The average of 1 number is %.2f\n", sum);elseprintf("The average of %d numbers is %.2f", ant, sum / ant);return 0;
}

代码2

#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <cctype>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
const int ERROR = -88888;
const int maxn = 1000;
double change(char s[]);
int main(int argc, char** argv) {
    int n;scanf("%d", &n);getchar();char s[maxn];int ant = 0;double sum = 0;while(n--) {
    scanf("%s", s);double res = change(s);if (res == ERROR) {
    printf("ERROR: %s is not a legal number\n", s);} else {
    ant++;sum += res;}}if (ant == 0)printf("The average of 0 numbers is Undefined\n");else if (ant == 1)printf("The average of 1 number is %.2f\n", sum);elseprintf("The average of %d numbers is %.2f", ant, sum / ant);return 0;
}
double change(char s[]) {
    int len = strlen(s);int begin = 0, i;if (s[0] == '-') {
    begin = 1;}double sum = 0;for (i = begin; i < len; i++) {
     // 到第一个小数点停。 if (s[i] == '.')break;if (!isdigit(s[i]))return ERROR;sum = sum * 10 + s[i] - '0';}if (len - i - 1 > 2) // 小数位大于2 return ERROR;double sum2 = 0; for (i++; i < len; i++) {
    if (!isdigit(s[i]))return ERROR;sum2 = sum2 * 10 + s[i] - '0';}sum2 = sum2 >= 10 ? sum2 / 100 : sum2 / 10;sum = sum + sum2;if (sum >= -1000 && sum <= 1000)return begin == 1 ? -sum : sum;elsereturn ERROR;
}
  相关解决方案