团体程序设计天梯赛 L1-025 正整数A+B

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;
}
发布了123 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Fiveneves/article/details/104694006