解析
- 对于每一个输入的数字判断是否合法(很麻烦)
- 若合法即装到vector中去,并且count++(用来记录合法的数字)
- 输出Average 注意小数点位数
cout<<fixed()<<setprecision(1)<<sum/count<<endl;
对于合法的判断
1. 先判断这是不是一个数字(2种情况)
第一种:例如3.45,7.89 这些正实数 即应该满足条件(num[0]>='0'&&num[0]<='9')
第二种:例如-3.45,-7.89这些负实数 即应该满足条件
(num[0]=='-'&&(num[1]>='0'&&num[1]<='9'))
第一个符号是符号,第二个符号是数字
2.再判断这个数字有几个小数点
for (int i = 0; i < num.length(); i++)
if(num[i] == '.')
Xiaoshudian++;//小数点个数
3.接着判断这个数字的小数位数
for (int i = 0; i < num.length(); i++)
if(num[i] == '.')
Position = i;//找到第一个小数点的位置
if(num.length()-Position-1 > 2&&Position != 0)
return false;//如果数字的长度-小数点的位置-1(这也就是小数的位数)
4.最后获取这个数字判断其abs()是否大于1000
double Num = stod(num);//stod函数
if(Num < -1000&&Num > 1000)
return false;
else
return true;
注意
- 注意0的输出 0.0
- 注意这些整数 01000.00 -01000.00 这些整数都是正确的
代码(未AC)
PAT结果
总结
- stirng 转int float double
int num = stoi()
double num = stod()
float num = stof()