Ranbo_ 发表于 2020-9-27 22:47:01

L1-025 正整数A+B

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

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

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

我的代码:

#include <bits/stdc++.h>

using namespace std;

int main()
{
    //string str1, str2;
    string str;
    bool flag1 = true, flag2 = true;
    int num1 = 0, num2 = 0, i;
    getline(cin, str);

    for (i = 0; i < str.length(); i++){
      if(str == ' '){
            if(i == 0)
                flag1 = false;
            break;
      }
      num1 = num1 * 10 + str - '0';
      if(str > '9' || str < '0' || num1 > 1000){
            flag1 = false;
            break;
      }
    }
    while(str != ' ') ;
    for (; i < str.length(); i++)
    {
      if(str == ' ')
            break;
      num2 = num2 * 10 + str - '0';
      
      if (str > '9' || str < '0' || num2 > 1000)
      {
            flag2 = false;
            break;
      }
    }

    if(flag1 && flag2)
      cout << num1 << " + " << num2 << " = " << num1 + num2 << endl;
    else{
      if(flag1)
            cout << num1;
      else
            cout << "?";
      cout << " + ";
      if(flag2)
            cout << num2;
      else
            cout << "?";
      cout << " = ?" << endl;
      //cout << (flag1 == true ? num1 : '?') << " + " << (flag2 == true ? num2 : '?') << " = " << '?' << endl;
    }

    system("pause");
    return 0;
}

Ranbo_ 发表于 2020-9-27 22:48:24

总是两个测试点过不去,我把字符串开始就是空格也考虑过了,中间多个空格也考虑过了,那俩测试点咋都过不去

baige 发表于 2020-9-27 23:05:53

之前做过的代码
#include <iostream>
#include <string>
using namespace std;

int to_int(string &num){
    int ans = 0;
    for(int i = 0; i < num.size(); ++i){
      ans = ans * 10 + num-'0';
    }
    return ans;
}

int main(){
    string num1 = "", num2 = "";
    cin >> num1;
    cin.get();
    getline(cin,num2);
    for(int i = 0; i < num1.size(); ++i){
      if(num1<'0'||num1>'9'){
            num1 = "?";
            break;
      }
    }
    for(int i = 0; i < num2.size(); ++i){
      if(num2<'0'||num2>'9'){
            num2 = "?";
            break;
      }
    }
   
    if(num1!="?"&&(to_int(num1)<1||to_int(num1)>1000))num1 = "?";
    if(num2!="?"&&(to_int(num2)<1||to_int(num2)>1000))num2 = "?";
    string ans = "";
    if(num1=="?"||num2=="?"){
      ans = "?";
    }
    else {
      ans = to_string(to_int(num1)+to_int(num2));
    }
   
    cout << num1 << " + " << num2 << " = " << ans;
   
    return 0;
}

baige 发表于 2020-9-27 23:35:37

#include <bits/stdc++.h>
using namespace std;

int main()
{
    //string str1, str2;
    string str;
    bool flag1 = true, flag2 = true;
    int num1 = 0, num2 = 0, i = 0;
    getline(cin, str);
    while (str == ' ');
    if (i != 0)i--;
    for (; i < str.length(); i++) {
      if (str == ' ')break;
      if (str > '9' || str < '0') {
            flag1 = false;
            break;
      }
      else {
            num1 = num1 * 10 + str - '0';
      }
    }
    while (str != ' ');
    for (; i < str.length(); i++)
    {

      if (str == ' ' || str > '9' || str < '0')
      {
            flag2 = false;
            break;
      }
      else {
            num2 = num2 * 10 + str - '0';
      }
    }
    if (num1 < 1 || num1 > 1000)flag1 = false;
    if (num2 < 1 || num2 > 1000)flag2 = false;
    if (flag1 && flag2)
      cout << num1 << " + " << num2 << " = " << num1 + num2 << endl;
    else {
      if (flag1)
            cout << num1;
      else
            cout << "?";
      cout << " + ";
      if (flag2)
            cout << num2;
      else
            cout << "?";
      cout << " = ?" << endl;
      //cout << (flag1 == true ? num1 : '?') << " + " << (flag2 == true ? num2 : '?') << " = " << '?' << endl;
    }

    system("pause");
    return 0;
}

baige 发表于 2020-9-27 23:36:14

过滤掉开头的空格,以及对数字范围的判断就可以了

Ranbo_ 发表于 2020-9-28 10:16:07

baige 发表于 2020-9-27 23:36
过滤掉开头的空格,以及对数字范围的判断就可以了

噢噢噢,我知道了,谢谢~
页: [1]
查看完整版本: L1-025 正整数A+B