PTA正整數A+B
阿新 • • 發佈:2020-11-14
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:
? + ? = ?
我們可以利用兩個字元陣列分別儲存空格前後的字串,然後設定兩個標記fa和fb,判斷是否為題目給出的合法整數。
這裡有一個坑,就是題目可能給出多個空格,如果空格挨在第一個空格後面的話,使用scanf("%s %s",A,B)就不能讀取到第二個空格了。所以要先用getchar函式吃掉一個空格,然後再使用cin.getline來獲得第一個空格後面的所有字串,這樣就可以將第二個空格讀取到了。
程式碼實現如下
#include <iostream> using namespace std; char A[20], B[20]; int main(){ int a = 0, b = 0; int fa = 1, fb = 1; scanf("%s", &A); getchar(); cin.getline(B, 100); for(int i = 0; A[i] != '\0'; i++) if(A[i] < '0' || A[i] > '9'){ fa = 0; break; } for(int i = 0; B[i] != '\0'; i++) if(B[i] < '0' || B[i] > '9'){ fb = 0; break; } if(fa){ for(int i = 0; A[i] != '\0'; i++) a = a * 10 + (A[i] - '0'); if(a < 1 || a > 1000) fa = 0; } if(fb){ for(int i = 0; B[i] != '\0'; i++) b = b * 10 + (B[i] - '0'); if(b < 1 || b > 1000) fb = 0; } if(fa && fb) printf("%d + %d = %d", a, b, a+b); else if(fa) printf("%d + ? = ?", a); else if(fb) printf("? + %d = ?", b); else printf("? + ? = ?"); return 0; }