L1-025 正整數A+B---題解

陳越大佬的題目讓我很無語,這個bug,我啓用了debug都改了將近2小時;嗚嗚嗚,acm本就逆天而行,死在路上很正常;

堅持+努力,便可換得前程似錦在這裏插入圖片描述

題目鏈接
L1-025 正整數A+B

解題思路:
1.因爲想到會有亂碼,而且會有空格,就想到用一個很長的字符數組去儲存A,B
2.先用alen,blen測A,B的長度,用兩個變量布爾變量標記A,B是否合格
3.用三個for循環,第一個測A的長度,第二個測交界處的空格數量,第三個測B的長度
4.用兩個for循環分別遍歷A,B,標記裏面非數字的字符,並改變標籤bool變量的值
5.當兩個bool變量爲真用兩個if語句,去計算A,B的數值大小
6.分情況討論輸出

#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;
int main()
{
    char a[1000];   // 用一個很長的字符數組a[1000]去儲存A,B
    memset(a,'\0',sizeof(a));
    cin.getline(a,1000);
    int alen=0,blen=0;  //用alen,blen測A,B的長度
    bool ajudge= true,bjudge= true;  //  用兩個變量布爾變量標記A,B是否合格 
    for (int i = 0; a[i] !=' ' ; ++i) {
        alen++;   //  測A的長度
    }
    int flag=0,aflag=alen;
    for (int m = alen; a[m] ==' ' ; ++m) {
        flag++;  // 測交界處的空格數量
    }
    for (int j = alen+flag; a[j] !='\0' ; ++j) {
        blen++;  //測B的長度
    }
    for (int k = 0; k <alen ; ++k) {
        if (a[k]>'9'||a[k]<'0')
        {
            ajudge= false;   // 標記裏面非數字的字符,並改變標籤bool變量的值
            break;
        }
    }
    for (int l = alen+flag; a[l]!='\0' ; ++l) {
        if (a[l]>'9'||a[l]<'0')
            bjudge= false;  // 標記裏面非數字的字符,並改變標籤bool變量的值
    }
    int avalue=0,bvalue=0;
    if (ajudge)   // bool變量爲真
    {
        int i=0;
        while (alen--)
        {
            avalue=avalue*10+a[i++]-'0';    // 計算A的值
        }
        if (avalue<1||avalue>1000)  //  判斷是否範圍越界
            ajudge= false;
    }
    if (bjudge)
    {
        int i=aflag+flag;
        while (blen--)
        {
            bvalue=bvalue*10+a[i++]-'0';
        }
        if (bvalue<1||bvalue>1000)
            bjudge= false;
    }     // 分情況討論輸出
    if (ajudge&&bjudge)   
    {
        cout<<avalue<<" "<<"+"<<" "<<bvalue<<" "<<"="<<" "<<avalue+bvalue<<endl;
    }
    if (!ajudge&&bjudge)
    {
        cout<<"?"<<" "<<"+"<<" "<<bvalue<<" "<<"="<<" "<<"?"<<endl;
    }
    if (ajudge&&!bjudge)
    {
        cout<<avalue<<" "<<"+"<<" "<<"?"<<" "<<"="<<" "<<"?"<<endl;
    }
    if (!ajudge&&!bjudge)
    {
        cout<<"?"<<" "<<"+"<<" "<<"?"<<" "<<"="<<" "<<"?"<<endl;
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章