##L1-025 正整數A+B (15分) 題的目標很簡單,就是求兩個正整數 \(A\) 和 \(B\) 的和,其中 \(A\) 和 \(B\) 都在區間 \([1,1000]\)。稍微有點麻煩的是,輸入並不保證是兩個正整數。 ###輸入格式: 輸入在一行給出 \(A\) 和 \(B\),其間以空格 ...
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:
? + ? = ?
代碼:
#include<bits/stdc++.h>
using namespace std;
int x1,x2;
bool flag1,flag2;
string a,b,c;
int main()
{
cin>>a>>b;
if(cin>>c)flag2=1;
if(a[0]=='0')flag1=1;
if(b[0]=='0')flag2=1;
for(int i=0;a[i]!='\0';i++)
{
if(!isdigit(a[i]))
{
flag1=1;
break;
}
else x1=(x1<<3)+(x1<<1)+(a[i]^48);
}
for(int i=0;b[i]!='\0';i++)
{
if(!isdigit(b[i]))
{
flag2=1;
break;
}
else x2=(x2<<3)+(x2<<1)+(b[i]^48);
}
if(x1>1000)flag1=1;
if(x2>1000)flag2=1;
if(flag1)cout<<"? + ";
else cout<<a<<" + ";
if(flag2)cout<<"? = ";
else cout<<b<<" = ";
if(flag1+flag2)cout<<'?'<<endl;
else cout<<x1+x2<<endl;
return 0;
}