1108 Finding Average

#include<iostream>

#include<string>

#include<cstring> // strlen()

#include<cstdio>

#include<iomanip>

using namespace std;

int main(){

int n, cnt = 0;

char a[50], b[50];

cin >> n;

double tmp = 0.0, sum = 0.0;

for(int i = 0; i < n; i++){

cin >> a;

// 使用sscanf将字符串转换为double形式

if(sscanf(a, "%lf", &tmp) != 1){

cout << "ERROR: " << a << " is not a legal number" << endl;

continue;

}

// 使用sprintf将tmp格式转换为两位小数

sprintf(b, "%.2f", tmp);

int flag = 0;

int len = strlen(a);

// 检查原始字符串和格式化后的字符串是否一致

for(int j = 0; j < len; j++){

if(a[j] != b[j]){

flag = 1;

break;

}

}

// 如果格式不一致或超出范围

if(flag != 0 || tmp < -1000 || tmp > 1000){

cout << "ERROR: " << a << " is not a legal number" << endl;

continue;

} else {

sum += tmp;

cnt++;

}

}

// 输出结果

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 {

cout << "The average of " << cnt << " numbers is "

<< fixed << setprecision(2) << sum / cnt << endl;

}

return 0;

}

相关推荐
用户0203388613145 分钟前
红黑树主要功能实现
算法
꧁Q༒ོγ꧂6 分钟前
C++ 入门完全指南(六)--指针与动态内存
开发语言·c++
永远不打烊7 分钟前
c++ 11 之 并发与多线程
c++
专注VB编程开发20年10 分钟前
压栈顺序是反向(从右往左)的,但正因为是反向压栈,所以第一个参数反而离栈顶(ESP)最近。
java·开发语言·算法
Xの哲學10 分钟前
Linux Select 工作原理深度剖析: 从设计思想到实现细节
linux·服务器·网络·算法·边缘计算
say_fall15 分钟前
C++ 类与对象易错点:初始化列表顺序 / 静态成员访问 / 隐式类型转换
android·java·开发语言·c++
Paul_092029 分钟前
golang编程题
开发语言·算法·golang
颜酱34 分钟前
用填充表格法-继续吃透完全背包及其变形
前端·后端·算法
夏秃然37 分钟前
打破预测与决策的孤岛:如何构建“能源垂类大模型”?
算法·ai·大模型
ChoSeitaku41 分钟前
16.C++入门:list|手撕list|反向迭代器|与vector对比
c++·windows·list