L1-025 正整數A+B(15 分)
題的目標很簡單,就是求兩個正整數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:
? + ? = ?
思路:
由於輸入的數是正整數,所以不需要考慮負號和小數點,只需確保輸入的數據全為數字(int isdigit(char))且在題目范圍內([1,1000])即可.
注意:1、兩個輸入,以第一個空格分割(即第二個字符串可能含有空格)(測試點4)
3、數字上限為1000(測試點5)
3、數字下限為1(測試點6)
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool Num(char ch) {
return !isdigit(ch);
}
int main() {
int addkey = 0; //判斷是否能求和
string A, B;
cin >> A;
getchar(); //清除空格
getline(cin, B);
if (count_if(A.begin(), A.end(), Num) == 0&&stoi(A)<=1000&&stoi(A)>=1)
cout << A;
else {
cout << "?";
addkey = 1;
}
cout << " + ";
if (count_if(B.begin(), B.end(), Num) == 0 && stoi(B) <= 1000 && stoi(B) >= 1)
cout << B;
else {
cout << "?";
addkey = 1;
}
cout << " = ";
if (addkey)
cout << "?";
else
cout << stoi(A) + stoi(B);
return 0;
}