题目描述
题的目标很简单,就是求两个正整数
A
和B
的和,其中A
和B
都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。输入格式:
输入在一行给出
A
和B
,其间以空格分开。问题是A
和B
不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。注意:我们把输入中出现的第1个空格认为是
A
和B
的分隔。题目保证至少存在一个空格,并且B
不是一个空字符串。输出格式:
如果输入的确是两个正整数,则按格式
A + B = 和
输出。如果某个输入不合要求,则在相应位置输出?
,显然此时和也是?
。
思路
分别判断第一个空格左边的内容和右边的内容是否合法, 有一个不合法 答案就为?
代码
#include <bits/stdc++.h>
#define PII pair<int, int>
typedef long long LL;
const int inf = 0x3f3f3f3f;
const int N = 500005;
using namespace std;
string a, b;
string check(string s){
if(s[0] == '-') return "?"; //负数
string num = "";
for(auto c : s){
if(!isdigit(c)) return "?"; //非数字
num = num + c;
}
if(stoi(num) < 1 || stoi(num) > 1000) return "?"; //超范围
return num;
}
int main(){
cin >> a;
getchar(); //读取第一个空格
getline(cin, b);
a = check(a);
b = check(b);
cout << a << " + " << b << " = ";
if(a == "?" || b == "?") cout << "?";
else cout << stoi(a) + stoi(b);
return 0;
}