团体程序设计天梯赛-练习集——L1-025 正整数A+B
一年之际在于春,新年的第一天,大家敲代码了吗?哈哈
前言
这道题分值是15分,值这个分,有一小点运算,难度不大,虽然说做出来了,但是有两个小疑点。
L1-025 正整数A+B
题的目标很简单,就是求两个正整数A
和B
的和,其中A
和B
都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。
输入格式:
输入在一行给出A
和B
,其间以空格分开。问题是A
和B
不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。
注意:我们把输入中出现的第1个空格认为是A
和B
的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。
输出格式:
如果输入的确是两个正整数,则按格式A + B = 和
输出。如果某个输入不合要求,则在相应位置输出?
,显然此时和也是?
。
输入样例1:
123 456
输出样例1:
123 + 456 = 579
输入样例2:
22. 18
输出样例2:
? + 18 = ?
输入样例3:
-100 blabla bla...33
输出样例3:
? + ? = ?
OK,以上就是所有的题目内容了,题目所说的是计算两个正整数加分,两个正整数的取值范围是1~1000,不符合以上要求的值在输出?
,结果对应的也输出?
下面看看代码吧
代码
#include <stdio.h>
#include <string.h>
int panduan(char num[])//计算并且判断输入的数字是否符合要求
{
int number = 0;
int l = strlen(num);
if(l>4) return -1;\\长度
else
{
for(int i = 0;i < l;i++)
{
if(num[i] >= '0'&&num[i] <= '9')number = number*10 + (num[i] - '0');//符合要求计算
else return -1;
}
}
if(number < 1||number > 1000)return -1;//所有-1都是不符合要求的
else return number;//返回输入的数字
}
int main()
{
char num1[100] = {0};
char num2[100] = {0};//定义两个数组存储输入的数字
scanf("%s ",&num1);
// gets(num1);
gets(num2);//这里有一个小问题,后面展开说一下
int number1 = panduan(num1);
int number2 = panduan(num2);//接收两个输入的值
//判断并且输出,为-1的话就输出?,不是-1的话就正常输出
if(number1 == -1&&number2 == -1)printf("? + ? = ?");
else if(number1 == -1&&number2)printf("? + %d = ?",number2);
else if(number1&&number2 == -1)printf("%d + ? = ?",number1);
else if(number1&&number2)printf("%d + %d = %d",number1,number2,number1+number2);
}
上面在输入的地方,注释掉了一部分,那里有一点问题,感觉这几个输入都差不多一样的分别来看一下,大家也想一下为什么不行
scanf("%s %s",&num1,&num2);
以上这种输入的话,会得到
的一个结果
如果
gets(num1);
gets(num2);
这样输入的话,就会得到下面
的结果
都会出错,但是都有分,下面的这个正确的好像是输出了一个? + ? = ?
的两分,说实话没什么用,跟没分没什么区别了也
以上所有代码均为自己编写,本人水平有限,如果有哪里出错或者有更好的解法可以与我私信或在评论区里进行讨论
上一题:团体程序设计天梯赛-练习集——L1-024 后天
下一题:团体程序设计天梯赛-练习集——L1-026 I Love GPLT