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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM