首页 > 其他分享 >L1-025 正整数A+B

L1-025 正整数A+B

时间:2024-11-15 09:44:20浏览次数:3  
标签:空格 正整数 num1 ss 025 flag1 L1 输入

目录

一、问题描述

二、问题分析 

三、源码解答

四、时空复杂度分析

五、参考资料


一、问题描述

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

1. 输入格式

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

注意:我们把输入中出现的第1个空格认为是AB的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。

2. 输出格式

如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?

3. 输入样例

123 456

4. 输出样例

123 + 456 = 579

5. 限制条件

代码长度限制        16 KB

时间限制                400 ms

内存限制                64 MB

栈限制                   8192 KB


二、问题分析 

1. 依次遍历字符串,遇到第一个空格时停止,并检查第一个数字是否合法;

2. 继续遍历字符串,遇到第二个空格时停止,并检查第二个数字是否合法;

3. 为防止第二个数字后还有多余的字符,应同时判断此时是否遍历完所有字符。

三、源码解答

#include<iostream>
#include<string>
using namespace std;
int main(){
    string ss, num1 = "", num2 = "";
    getline(cin, ss);
    int len = ss.size(), k = 0;
    //判断两个数是否合法
    int flag1 = 1, flag2 = 1;
    //取第一个数, 同时判断是否合法
    for(k; k < len; ++k) {
        if(ss[k] == ' ') break;
        if(ss[k] < '0' || ss[k] > '9') {
            flag1 = 0;
        }
        else {
            num1 += ss[k];
        }
    }
    //取第二个数, 同时判断是否合法
    for(k = k + 1; k < len; ++k) {
        if(ss[k] == ' ') break;
        if(ss[k] < '0' || ss[k] > '9') {
            flag2 = 0;
        }
        else {
            num2 += ss[k];
        }
    }
    //因为题目要求在[1,1000]之内
    flag1 = (flag1 && stoi(num1) >= 1 && stoi(num1) <= 1000) ? flag1 : 0;
    flag2 = (flag2 && stoi(num2) >= 1 && stoi(num2) <= 1000) ? flag2 : 0;
    //以防第二个数后还有多余的字符
    flag2 = flag2 && (k >= ss.size());
    if(flag1) cout << stoi(num1) << " + ";
    else      cout << "? + ";
    if(flag2) cout << stoi(num2) << " = ";
    else      cout << "? = ";
    if(flag1 && flag2) {
        cout << stoi(num1) + stoi(num2) << endl;
    }
    else {
        cout << "?";
    }
    return 0;
}

四、参考资料

PTA | 程序设计类实验辅助教学平台

标签:空格,正整数,num1,ss,025,flag1,L1,输入
From: https://blog.csdn.net/weixin_65214650/article/details/143687503

相关文章

  • 2025 --炼石计划-- 11 月 13 日 --NOIP 模拟赛 #20
    2025--炼石计划--11月13日--NOIP模拟赛#20T1邻间的骰子之舞签到题显然答案具有二分性,考虑二分答案。注意到每次有意义的复制会使长度翻倍,即最多复制\(60\)次,而粘贴则类似一个乘积的形式,check时可以枚举复制次数,此时则能知道粘贴次数,由和定平分时积最大得到最大长度......
  • 【Inventor pro 2025下载与安装教程 含破解】
    1、安装包「Inventorpro2025」:链接:https://pan.quark.cn/s/d5d3bd812ae7提取码:Jp9B「Inventor2024」:链接:https://pan.quark.cn/s/8c39fc4bc193提取码:xdG5「Inventor2019」:链接:https://pan.quark.cn/s/8d7326f76cce提取码:XfSc2、安装教程(建议关闭杀毒软件)1)  ......
  • MX 2025--炼石计划 NOIP 模拟赛 #20
    打得抽象。T3,T4放俩难的板子。由于是MX的题,就不放题意了。邻间的骰子之舞发现复制操作不会超过\(64\)次,而粘贴操作肯定是越均匀越好,直接二分暴力跑就行了。点此查看代码#include<bits/stdc++.h>usingnamespacestd;#definerep(i,s,t,p)for(inti=s;i<=t;i+=p)#......
  • 知乎3.4万赞,大模型入门书籍精选!2025年程序员必备!
    在知乎上,"如何系统的入门大模型?"这一话题引爆了超过50万读者的热烈讨论。作为程序员,我们应当是最先了解大模型的人,也是率先成为了解大模型应用开发的人,到底如何入门大模型的应用开发?前排提示,文末有大模型AGI-CSDN独家资料包哦!我精心整理了一份2024年畅销的大模型书单。......
  • 2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k, 定义
    2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k,定义一个子序列的能量为子序列中任意两个元素之间的差值绝对值的最小值。找出nums中长度为k的所有子序列的能量和,对结果取模10^9+7后返回。输入:nums=[1,2,3,4],k=3。输出:4。解释:......
  • more Layer Architecture in Python and postgreSQL17.0
    postgreSQLscript:createtableSchool--創建表(SchoolIdchar(5)NOTNULLPRIMARYKEY,SchoolNamevarchar(500)NOTNULLDEFAULT'',SchoolTelNovarchar(8)NULLDEFAULT'');model:#encoding:utf-8#版权所有20......
  • 【Maya 2025软件下载与安装教程 含补丁】
     1、安装包「maya2025」:链接:https://pan.quark.cn/s/de0d9d452470提取码:Rhjp「maya2024」:链接:https://pan.quark.cn/s/887e52b68f51提取码:jvyp「maya2023」:链接:https://pan.quark.cn/s/71f46b3d26e5提取码:b6mA「maya2020」:链接:https://pan.quark.cn/s/7b0e8b98b52e......
  • 题解:CF2025E Card Game
    在这貌似和大部分做法不太一样(?)权当卡特兰数的复习题吧。不会卡特兰数的可以先看文末。如果没有花色\(1\)这道题就很简单了,对于每个别的花色都有\(C(m)\)种分配方案。\(C(n)\)表示卡特兰数的第\(n\)项,答案就是乘起来。发现除了花色\(1\)每种花色的牌都是独立的。这......
  • 使用 WinNTSetup 来安装 Windows 11 24H2 或 Windows Server 2025 可以帮助你快速创建
    使用WinNTSetup来安装Windows1124H2或WindowsServer2025可以帮助你快速创建和部署操作系统。以下是详细的步骤:1.准备工作在开始之前,确保你已经具备以下条件:WinNTSetup 工具。可以从官方网站或者其他可信的来源下载WinNTSetup。Windows1124H2或WindowsServe......
  • 2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k, 定义
    2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k,定义一个子序列的能量为子序列中任意两个元素之间的差值绝对值的最小值。找出nums中长度为k的所有子序列的能量和,对结果取模10^9+7后返回。输入:nums=[1,2,3,4],k=3。输出:4。解释:nums......