L1-025 正整数A+B
题目链接-L1-025 正整数A+B
输入样例1:
123 456
输出样例1:
123 + 456 = 579
输入样例2:
- 18
输出样例2:
? + 18 = ?
输入样例3:
-100 blabla bla...33
输出样例3:
? + ? = ?
解题思路
- 因为至少存在一个空格,所以我们可以用
getline()
输入,再把字符串分为a,b两个字符串 - 遍历字符串,当遇到第一个空格时,以此为分界线,利用
string.substr()
函数得到a,b字符串
当遇到第一个空格得到a,b字符串之后一定要break
结束循环!!!否则如果后面还有空格就会导致错误,因为题目规定输入中出现的第1个空格认为是A和B的分隔 - 写一个isLegal()函数来判断a,b字符串是否合理,不合理的条件有:
1. B不是一个空字符串
2. A和B都在区间[1,1000]
3. A,B都为正整数
如果字符串不合理则将字符串变成" ?" - 如果a,b字符串都合理,则用
stoi()
函数分别将两个字符串转换为整型数字再做运算 - 具体操作见代码
附上代码
#include<bits/stdc++.h>
#define int long long
#define lowbit(x) (x &(-x))
using namespace std;
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);
const double eps=1e-10;
const int M=1e9+7;
const int N=1e5+5;
typedef long long ll;
typedef pair<int,int> PII;
string s,a,b;
bool isLegal(string s){
if(s.length()==0)
return 0;
for(int i=0;i<s.length();i++)
if(!isdigit(s[i]))
return 0;
int t=stoi(s);
if(t<1||t>1000)
return 0;
return 1;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
getline(cin,s);
for(int i=0;i<s.length();i++){
if(s[i]==' '){
a=s.substr(0,i);
b=s.substr(i+1,s.length()-i-1);
break;//此处一定要有break
//因为题目规定输入中出现的第1个空格认为是A和B的分隔
}
}
if(!isLegal(a)) a="?";
if(!isLegal(b)) b="?";
if(isLegal(a)&&isLegal(b)){
int sum1=stoi(a);
int sum2=stoi(b);
cout<<sum1<<" + "<<sum2<<" = "<<sum1+sum2;
}
else
cout<<a<<" + "<<b<<" = "<<"?";
return 0;
}