题的目标很简单,就是求两个正整数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:
? + ? = ?
解析:输入中 A有可能是一个空字符串, B有可能是一个包含空格的字符串。
#include <iostream>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <queue>
#include <cstdio>
#include <cmath>
#include <set>
#include <algorithm>
#include <iterator>
#include <cstdlib>
#include <sstream>
using namespace std;
bool check(string s) {
if (s.length() == 0) {
return false;
}
for (int i = 0; i < s.length(); i++) {
if (s[i] < '0' || s[i] > '9') {
return false;
}
}
stringstream ss;
int n;
ss.clear();
ss << s;
ss >> n;
if (n >= 1 && n <= 1000) {
return true;
}
else {
return false;
}
}
int main() {
//freopen("in.txt", "r", stdin);
stringstream ss;
int A = 0, B = 0;
string s1, s2;
string t;
getline(cin, t);
for (int i = 0; i < t.length(); i++) {
if (t[i] == ' ') {
s1 = t.substr(0, i);
s2 = t.substr(i + 1);
break;
}
}
if (!check(s1)) {
s1 = "?";
}
if (!check(s2)) {
s2 = "?";
}
cout << s1 << " + " << s2 << " = ";
if (s1 != "?" && s2 != "?") {
int a, b;
ss.clear();
ss << s1;
ss >> a;
ss.clear();
ss << s2;
ss >> b;
cout << a + b;
}
else {
cout << "?";
}
return 0;
}