L1-025 正整数A+B (15 分)
1.题目描述:
题的目标很简单,就是求两个正整数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:
? + ? = ?
2.代码展示:
#include<bits/stdc++.h>
using namespace std;
//用于判断字符串是否为数字
bool isNum(string s){
for(int i=0;s[i];i++)
if(s[i]-'0'<0 || s[i]-'0'>9)return false;
return true;
}
int main(){
string s1,s2,s;
getline(cin,s);//读入一整串字符串
//找到第一个空格,空格左边赋给s1字符串,空格右边赋给s2字符串
for(int i=0;s[i];i++){
if(s[i]==' '){
s1=s.substr(0,i);
s2=s.substr(i+1);
break;
}
}
//如果两个字符串都是数字,则对其是否在区间[1,1000]进行判断
if(isNum(s1)&&isNum(s2)){
long long a1=stoi(s1);
long long a2=stoi(s2);
int flag3=1,flag4=1;
//如果不满足条件,则将字符串变为"?",方便输出
if(a1<1||a1>1000){
s1="?";
flag3=0;
}
//如果不满足条件,则将字符串变为"?",方便输出
if(a2<1||a2>1000){
s2="?";
flag4=0;
}
//如果满足在区间[1,1000]的条件,则计算他们的和
if(flag3&&flag4){
long long res=a1+a2;
cout<<s1<<" + "<<s2<<" = "<<res<<endl;
}
//否则输出如下
else cout<<s1<<" + "<<s2<<" = ?"<<endl;
return 0;
}
//控制正确的输出
if(!isNum(s1) && isNum(s2))s1="?";
if(isNum(s1) && !isNum(s2))s2="?";
if(!isNum(s1) && !isNum(s2)){
s1="?",s2="?";
}
cout<<s1<<" + "<<s2<<" = ?"<<endl;
return 0;
}
3.注意:
注意:
难点:
1)A可能是空格、0、负数、乱码;B除了不能为空字符串其他一样。
2)A,B可能为整数,但是范围并不在[1,1000]中。(对应于测试点5和6)。
输入时用getline接受所有字符串,根据第一个空格为A、B分隔点找出A、B赋值给变量;
原题链接:PTA | 程序设计类实验辅助教学平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人