[pat题解]1108.Finding Average

PAT1108题,本题要求输入N个字符串,然后判断这些字符串是否表示一个合法的数,将所有合法的数求和并计算其均值。对于不合法的数,对其进行输出。

合法规则:值必须在[-1000, 1000]范围内,并且精度不能超过小数点后两位。规则比较简单。

本题注意点:
1.要判断精度,比如1.000,精度为三位小数,不符合规则,则表示该数是非法的。
2.要判断该字符串能否表示一个数,比如aaa,显然不能表示一个数,所以也是非法的。
3.要判断转化后的值是否在[-1000, 1000]范围内。
4.对于合法数个数大于1,1和0时的输出问题。

代码如下:

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>


void print_result(int cnt, double sum)
{
	//注意输出
	if (cnt > 1)
	{
		printf("The average of %d numbers is %.2f\n", cnt, sum / cnt);
	}
	else if (cnt == 1)
	{
		printf("The average of %d number is %.2f\n", cnt, sum / cnt);
	}
	else
	{
		printf("The average of 0 numbers is Undefined\n");
	}
}

int main()
{
	int n, cnt = 0;
	char snum[1024];
	double sum = 0;

	scanf("%d", &n);

	for (int i = 0; i < n; ++i)
	{
		scanf("%s", snum);
		int len = strlen(snum);

		//判断精度
		char *sp= strchr(snum, '.');

		if (sp != NULL && strlen(sp + 1) > 2)
		{
			printf("ERROR: %s is not a legal number\n", snum);
			continue;
		}

		//判断是否是合法的数
		char *end;
		double num = strtod(snum, &end);

		if (end != snum + len)
		{
			printf("ERROR: %s is not a legal number\n", snum);
		}
		else
		{
			//判断是否超出规定范围
			if (num == HUGE_VAL || num < -1000.0 || num > 1000.0)
			{
				printf("ERROR: %s is not a legal number\n", snum);
			}
			else
			{
				++cnt;
				sum += num;
			}
		}
	}
	print_result(cnt, sum);
	return 0;
}

本文遵从CC3.0协议转载请注明:转自凌风技术站

本文标题:[pat题解]1108.Finding Average

本文链接地址:http://www.iaccepted.net/algorithm/pat/125.html

相关文章



发表评论

电子邮件地址不会被公开。 必填项已用*标注