L1-025 正整数A+B(字符串)
题的目标很简单,就是求两个正整数 A
和 B
的和,其中 A
和 B
都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。
输入格式:
输入在一行给出 A
和 B
,其间以空格分开。问题是 A
和 B
不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。
注意:我们把输入中出现的第1个空格认为是 A
和 B
的分隔。题目保证至少存在一个空格,并且 B
不是一个空字符串。
输出格式:
如果输入的确是两个正整数,则按格式 A + B = 和
输出。如果某个输入不合要求,则在相应位置输出 ?
,显然此时和也是 ?
。
输入样例1:
输出样例1:
输入样例2:
输出样例2:
输入样例3:
输出样例3:
思路:
先写一个函数判断输入是不是合法数字,注意数字要在[1, 1000]区间内,两个都是数字,则相加,否则不合法的替换为问号,结果也是问号。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include <bits/stdc++.h> using namespace std;
string A, B;
bool isNum(string s) { int i; for(i = 0; i < s.length(); i++) { if(!isdigit(s[i])) break; } if(i != s.length()) return false; if(stoi(s) < 1 || stoi(s) > 1000) return false; return true; }
int main() { cin >> A; getchar(); getline(cin, B); if(isNum(A) && isNum(B)) cout << A << " + " << B << " = " << stoi(A)+stoi(B); else { if(!isNum(A)) A = "?"; if(!isNum(B)) B = "?"; cout << A << " + " << B << " = " << "?"; } return 0; }
|