L1-025 正整数A+B (15分) 团体程序设计天梯赛-练习集 C语言

L1-025 正整数A+B (15分)

题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。

输入格式:

输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。

注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。

输出格式:

如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?。

输入样例1:

123 456

输出样例1:

123 + 456 = 579

输入样例2:

  1. 18

输出样例2:

? + 18 = ?

输入样例3:

-100 blabla bla…33

输出样例3:

? + ? = ?

题目并不是特别的难,只是有一些需要注意的小细节,比如说数据范围是[1,1000],这个时候,当A或者B取0,或者是1000以上的数值时都应该被判定为不合标准,还有当A是空的时候,也是要特殊考虑一下的。
好好读题!好好读题!好好读题!

#include
#include
int zh(char a)//符合条件的A与B字符串转化
{
     
	switch (a)
	{
     
	case '0':
		return 0;
	case '1':
		return 1;
	case '2':
		return 2;
	case '3':
		return 3;
	case '4':
		return 4;
	case '5':
		return 5;
	case '6':
		return 6;
	case '7':
		return 7;
	case '8':
		return 8;
	case '9':
		return 9;
	}
}
int main()
{
     
	char A[100], B[100];
	for (int i = 0;; ++i)
	{
     
		char mid;
		mid = getchar();
		if (mid != ' ')//当输入的字符为' '空格时跳出循环
			A[i] = mid;
		else
		{
     
			A[i] = '\0';
			break;
		}
	}
	for (int i = 0;; ++i)
	{
     
		char mid;
		mid = getchar();
		if (mid != '\n')
			B[i] = mid;
		else
		{
     
			B[i] = '\0';
			break;
		}
	}
	int len_a = strlen(A), len_b = strlen(B), a_z = 0, b_z = 0;
//a_z和b_z都代表了A与B的是否符合标准的状态,0符合,1不符合
	if (len_a == 0)//如果A的长度为0,A是空串,不符合标准
		a_z = 1;
	for (int i = 0; i < len_a; ++i)
	{
     

		if (A[i] < '0' || A[i]>'9')//如果出现了不是数字的字符,不符合标准
		{
     
			a_z = 1;
			break;
		}
	}
	if (len_b == 0)//其实这里可以不用判断,因为题目说了保证B不为空字符串
		b_z = 1;
	for (int i = 0; i < len_b; ++i)
	{
     
		if (B[i] < '0' || B[i]>'9')//与A的道理相同
		{
     
			b_z = 1;
			break;
		}
	}
	if (a_z == 1 || (len_a == 4 &&  (A[3] != '0'||A[2]!='0'||A[1]!='0'||A[0]!='1')) || len_a > 4 || (A[0] == '0'&&len_a==1))
	//意义分别为:字符串中有非数字字符||如果长度为4时只能为1000||长度超过4||长度为1,且值为零
	{
     
		printf("? ");
		a_z = 1;
	}
	else
		printf("%s ", A);
	printf("+ ");
	if (b_z == 1 || (len_b == 4&&(B[3]!='0'||B[2]!='0'||B[1]!='0'||B[0]!='1'))||len_b>4||B[0]=='0'&&len_b==1)//与A判断意义相同
	{
     
		printf("? ");
		b_z = 1;
	}
	else
		printf("%s ", B);
	printf("= ");
	if (a_z == 1 || b_z == 1)//如果A与B中有任何一个为?,结果为?
		printf("?\n");
	else//A与B都符合标准,进行转换与计算
	{
     
		int a = 0, b = 0;
		for (int i = 1, bei = 1; i <= len_a; ++i, bei *= 10)
			a += zh(A[len_a - i]) * bei;
		for (int i = 1, bei = 1; i <= len_b; ++i, bei *= 10)
			b += zh(B[len_a - i]) * bei;
		printf("%d\n", a + b);
	}
	return 0;
}

你可能感兴趣的:(c语言,程序设计)