首先!!!还是看了小姐姐的思路!!因为很多知识点都不知道,只能这样慢慢刷题学习辣~
学到了sscanf()和sprintf()
第一个sscanf(源字符串,格式,目的变量)是以字符串为输入源,存储到你定义的格式变量里
第二个sprintf(目的字符串,格式,源变量)是将格式化的数据写入字符串
所以这道题先把输入的a字符串转换为数字
再从数字转换为b字符串
再判断ab字符串是否相等
若不相等说明这个数不合法 否则就合法辣~~
最后就是输出格式的问题辣~~认真看题
完整code:
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;int main()
{int T;cin >> T;char a[50],b[50];double temp,sum=0;int count=0;while(T--){scanf("%s",a);sscanf(a,"%lf",&temp);//将a字符串转换为格式lf存到temp里 //cout << temp << endl;sprintf(b, "%.2lf",temp);//将格式化的temp写入字符串b int flag = 0;for(int j=0;j<strlen(a);j++)//判断新的字符串跟原来的是不是相等的 {if(a[j]!=b[j])flag = 1;}if(flag || temp<-1000||temp>1000)//如果flag = 1表示不相等有问题 {printf("ERROR: %s is not a legal number\n",a);}else{count++;sum += temp; } }
// cout << sum << " " << count << " " <<sum/count<< endl;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,(double)sum/count); } else{printf("The average of 0 numbers is Undefined\n");}return 0;}