Skip to content

L1-025 正整数A+B

Statement

Metadata

  • 作者: 陈越
  • 单位: 浙江大学
  • 代码长度限制: 16 KB
  • 时间限制: 400 ms
  • 内存限制: 64 MB

题的目标很简单,就是求两个正整数AB的和,其中AB都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。

输入格式

输入在一行给出AB,其间以空格分开。问题是AB不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。

注意:我们把输入中出现的第1个空格认为是AB的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。

输出格式

如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?

输入样例1

123 456

输出样例1

123 + 456 = 579

输入样例2

22. 18

输出样例2

? + 18 = ?

输入样例3

-100 blabla bla...33

输出样例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
Back to top