2016年团体程序设计天梯赛-决赛 L1-1. 正整数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:

22. 18

输出样例2:

? + 18 = ?

输入样例3:

-100 blabla bla...33

输出样例3:

? + ? = ?

记得只有在[1,1000]范围里的数字才有效哦
 1 #include<stdio.h>
2 #include<iostream>
3 #include<math.h>
4 #include<string.h>
5 #include<limits.h>
6 #include<algorithm>
7 #include<queue>
8 using namespace std;
9
10 int main()
11 {
12 char a[1000],b[1000];
13 cin>>a;
14 scanf(" ");
15 gets(b);
16 bool flag1=true,flag2=true;
17 int len1=strlen(a),len2=strlen(b);
18 if(len1<1||len1>4)
19 flag1=false;
20 else
21 {
22 for(int i=0;i<len1;i++)
23 if(a[i]<'0'||a[i]>'9')
24 {
25 flag1=false;
26 break;
27 }
28 }
29 if(len2<1||len2>4)
30 flag2=false;
31 else
32 {
33 for(int i=0;i<len2;i++)
34 if(b[i]<'0'||b[i]>'9')
35 {
36 flag2=false;
37 break;
38 }
39 }
40 int c=0,d=0;
41 if(flag1&&flag2)
42 {
43 for(int i=0;i<len1;i++)
44 {
45 c=c*10+a[i]-'0';
46 }
47 for(int i=0;i<len2;i++)
48 {
49 d=d*10+b[i]-'0';
50 }
51 if(c<1||c>1000)flag1=false;
52 if(d<1||d>1000)flag2=false;
53 }
54 if(flag1)cout<<a;
55 else cout<<"?";
56 cout<<" + ";
57 if(flag2)cout<<b;
58 else cout<<"?";
59 cout<<" = ";
60 if(flag1&&flag2)
61 {
62 cout<<c+d;
63 }
64 else cout<<"?";
65 cout<<endl;
66 return 0;
67 }

 

智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告