乐逍遥xwl

导航

L1-025 正整数A+B

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

输入格式:

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

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

输出格式:

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

输入样例1:

123 456

输出样例1:

123 + 456 = 579

输入样例2:

22. 18

输出样例2:

? + 18 = ?

输入样例3:

-100 blabla bla...33

输出样例3:

? + ? = ?
 
思路:考虑到可以用第一个出现的空格分隔成两部分,直接用string或者字符串接收,注意接收方式的不同,后面的部分有空格,用getline或者gets接收,再判断四种情况,另外注意数值可能超出1到1000范围,有关于最后两个测试点......
 
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cmath>
 4 using namespace std;
 5 int main()
 6 {
 7     string str1,str2;
 8     cin>>str1;
 9     getchar();
10     getline(cin,str2);
11     int flag1=0,flag2=0;
12     for(int i=0;i<str1.size();i++)
13     {
14         if(str1[i]<'0'||str1[i]>'9')
15         {
16             flag1=1;
17             break;
18         }
19     }
20     if(flag1==0)
21     {
22         if(stoi(str1)<1||stoi(str1)>1000)
23         flag1=1;
24     }
25     for(int i=0;i<str2.size();i++)
26     {
27         if(str2[i]<'0'||str2[i]>'9')
28         {
29             flag2=1;
30             break;
31         }
32     }
33     if(flag2==0)
34     {
35         if(stoi(str2)<1||stoi(str2)>1000)
36         flag2=1;
37     }
38     if(flag1==0&&flag2==0)
39     {
40         cout<<str1<<" + "<<str2<<" = "<<stoi(str1)+stoi(str2)/*atoi(str1.c_str())+atoi(str2.c_str())*/<<endl;
41     }
42     else if(flag1==0&&flag2==1)
43     {
44         cout<<str1<<" + "<<"?"<<" = "<<"?"<<endl;
45     }
46     else if(flag1==1&&flag2==0)
47     {
48         cout<<"?"<<" + "<<str2<<" = "<<"?"<<endl;
49     }
50     else if(flag1==1&&flag2==1)
51     {
52         cout<<"?"<<" + "<<"?"<<" = "<<"?"<<endl;
53     }
54     return 0;
55  } 

 

 

posted on 2019-01-20 18:21  乐逍遥xwl  阅读(781)  评论(0编辑  收藏  举报