L1-025 正整數A+B

題的目標很簡單,就是求兩個正整數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:

? + ? = ?

 Note:一開始我定義兩個數組來分別讀取 A 和 B,但是發現這樣子的話處理不了中間的空格。所以選用一個字符數組,以碰到的第一個空格爲分界線,這樣就好做多了。但是我這個程序有個 bug 我現在解決不了。就是當 A 或 B 是空字符串時輸出的是錯誤的結果,等以後再來處理吧,也應該是題目測試用例的 bug。

#include <stdio.h>
#include <string.h>

int main()
{
    char S[100001];
    gets(S);
    int a = 0, b = 0, flagA = 0, flagB = 0;
    int l = strlen(S), space;
    for (int i = 0; S[i] != '\0'; i++) {        // 找第一個空格
        if (S[i] == ' ') {
            space = i;                          // 記錄第一個空格的位置並跳出循環
            break;
        }
    }
    for (int i = 0; i < space; i++) {           // 空格前爲 A 串
        if (S[i] >= '0' && S[i] <= '9')
            a = a * 10 + (S[i] - '0');
        else {                                  // 碰到特殊字符做個標記然後跳出循環
            flagA = 1;
            break;
        }
        if (a < 1 || a > 1000) flagA = 1;       // A 不合法做個標記
    }

    for (int i = space + 1; i < l; i++) {       // 空格後爲 B 串
        if (S[i] >= '0' && S[i] <= '9')
            b = b * 10 + (S[i] - '0');
        else {
            flagB = 1;
            break;
        }
        if (b < 1 || b > 1000) flagB = 1;
    }
    if (!flagA && !flagB) printf("%d + %d = %d", a, b, a + b);
    if (!flagA && flagB) printf("%d + ? = ?", a);
    if (flagA && !flagB) printf("? + %d = ?", b);
    if (flagA && flagB) printf("? + ? = ?");
}

自己試着不要看把代碼碼出來哦,測試樣例可以直接複製,加油小fo汁,爲了更美好的未來呢~~~ 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章