L1-025 正整数A+B (15 分)

1.题目描述:

题的目标很简单,就是求两个正整数AB的和,其中AB都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。

输入格式:

输入在一行给出AB,其间以空格分开。问题是AB不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。

注意:我们把输入中出现的第1个空格认为是AB的分隔。题目保证至少存在一个空格,并且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 | 程序设计类实验辅助教学平台

posted @   回忆、少年  阅读(50)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示