L1-025 正整数A+B
Statement
Metadata
- 作者: 陈越
- 单位: 浙江大学
- 代码长度限制: 16 KB
- 时间限制: 400 ms
- 内存限制: 64 MB
题的目标很简单,就是求两个正整数A
和B
的和,其中A
和B
都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。
输入格式
输入在一行给出A
和B
,其间以空格分开。问题是A
和B
不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。
注意:我们把输入中出现的第1个空格认为是A
和B
的分隔。题目保证至少存在一个空格,并且B
不是一个空字符串。
输出格式
如果输入的确是两个正整数,则按格式A + B = 和
输出。如果某个输入不合要求,则在相应位置输出?
,显然此时和也是?
。
输入样例1
输出样例1
输入样例2
输出样例2
输入样例3
输出样例3
Solution
#include <ctype.h>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <vector>
using namespace std;
typedef long long LL;
const double PI = 3.14159265358979323846264338327;
const double E = 2.718281828459;
const double eps = 1e-6;
const int MAXN = 0x3f3f3f3f;
const int MINN = 0xc0c0c0c0;
const int maxn = 1e5 + 5;
const int MOD = 1e9 + 7;
int f(string s) {
int len = s.size();
int i;
int num = 0;
if (s[0] == '0')
return -1;
for (i = 0; i < len; i++) {
if (s[i] <= '9' && s[i] >= '0')
num = num * 10 + (s[i] - '0');
else {
return -1;
}
}
return num;
}
int main() {
string a, b;
cin >> a;
getchar();
getline(cin, b);
// cout << b << endl;
int n = f(a);
int m = f(b);
if (n >= 1 && n <= 1000 && m >= 1 && m <= 1000)
printf("%d + %d = %d\n", n, m, n + m);
else if (n <= 1000 && n >= 1)
printf("%d + ? = ?\n", n);
else if (m <= 1000 && m >= 1)
printf("? + %d = ?\n", m);
else
printf("? + ? = ?\n");
}
Last update: May 4, 2022