陳越大佬的題目讓我很無語,這個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;
}