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:
? + ? = ?
只要处理掉是?的情况就行了:
1、"超出范围的数字、负数、带小数点的实数、甚至是一堆乱码"
2、只要一方是?和就是?
做法:A和B是以空格隔开,所以我们要特判第一个字符,然后再用两个字符串存A和B,排除掉所有情况后把它们转换为数字输出,在转换成数字的时候还要判断一下是否超出1000,具体看代码
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define LL long long 4 #define maxn 2000 5 int main() { 6 char s[maxn]; 7 gets (s); 8 int len = strlen (s); 9 int flag = 0; 10 int flag2 = 0; 11 string a = "", b = ""; 12 if (s[0] >= '1' && s[0] <= '9') 13 a += s[0]; 14 else if (s[0] == ' ') { 15 flag = 1; 16 a = "?"; 17 } else 18 a = "?"; 19 for (int i = 1; i < len; i++) { 20 if (flag == 0) { 21 if (s[i] == ' ') { 22 flag = 1; 23 } else if ( (s[i] >= '0' && s[i] <= '9') && a != "?") { 24 a = a + s[i]; 25 } else 26 a = "?"; 27 } else if (flag2 == 0 ) { 28 if (s[i] >= '1' && s[i] <= '9') { 29 b += s[i]; 30 flag2 = 1; 31 } else { 32 b = "?"; 33 break; 34 } 35 } else { 36 if (! (s[i] >= '0' && s[i] <= '9') ) { 37 b = "?"; 38 break; 39 } else 40 b = b + s[i]; 41 } 42 } 43 if (a != "?" && b != "?") { 44 int numa = 0, numb = 0; 45 int la = a.size(); 46 int lb = b.size(); 47 for (int i = la - 1; i >= 0 ; i--) { 48 numa += (a[i] - '0') * pow (10, la - i - 1); 49 } 50 for (int i = lb - 1; i >= 0 ; i--) { 51 numb += (b[i] - '0') * pow (10, lb - i - 1); 52 } 53 int sum = numa + numb; 54 if (numa > 1000) 55 cout << "? + " << b << " = ?" << endl; 56 else if (numb > 1000) 57 cout << a << " + ? = ?" << endl; 58 else 59 cout << numa << " + " << numb << " = " << sum << endl; 60 61 } else 62 cout << a << " + " << b << " = ?" << endl; 63 return 0; 64 }