题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。
输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。
注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。
如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?。
123 456
123 + 456 = 579
? + 18 = ?
-100 blabla bla…33
? + ? = ?
题目并不是特别的难,只是有一些需要注意的小细节,比如说数据范围是[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;
}