样例3:123 123 kjaksdj 第一个空格以后的都是B
注意:我们把输入中出现的第1个空格认为是A
和B
的分隔。题目保证至少存在一个空格,并且B
不是一个空字符串。
意思中隐含:A可以是空字符串 所以要先读取整行字符 之后根据空格的出现位置进行分割 substr
左闭右开
#include <iostream>
#include <cmath>
#include <cstring> //substr() 截取字符串
using namespace std;
string a,b,c;
int res;
int m,n;
int main(){
getline(cin,c);
for(int i=0;i<c.size();i++){
if(c[i]==' '){
a=c.substr(0,i);
b=c.substr(i+1,c.size());
break;//找到后就立马退出
}
}
int af=0,bf=0;//判断是否有非数字项 有负号 也不可。
for(int i=0;i<a.size();i++){
if((a[i]-'0')>=0&&(a[i]-'0')<=9) m+=pow(10,a.size()-i-1)*(a[i]-'0');
else af=1;//非法
}
if(m==0||m>1000) af=1;//是否越界
for(int i=0;i<b.size();i++){
if((b[i]-'0')>=0&&(b[i]-'0')<=9) n+=pow(10,b.size()-i-1)*(b[i]-'0');
else bf=1;//非法
}
if(n==0||n>1000) bf=1;
if(af){
if(bf) cout<<"? + ? = ?";
else cout<<"? + "<<n<<" = ?";
}
else{
if(bf) cout<<m<<" + "<<"? = "<<"?";
else cout<<m<<" + "<<n<<" = "<<m+n;
}
return 0;
}
Python解法 (异常处理+maxsplit)
a,b=input().split(maxsplit=1) 必须加maxsplit
try:
a=int(a)
if a<=0 or a>1000:
a='?'
except ValueError:
a='?'
try:
b=int(b)
if b<=0 or b>1000:
b='?'
except ValueError:
b='?'
if a=='?' or b=='?':
t='?'
else:
t=a+b
print("{} + {} = {}".format(a,b,t))