L1-025 正整數A+B(15)(思路+測試點分析)
阿新 • • 發佈:2018-12-09
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
#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; }