正整数A+B(PTA团体天题练习题)细节题刨析

哎呀,又是看似简单的A+B模型,这题确实也是A+B,不过这个题让我debug1个多小时才找出来问题所在,服了,真是所谓细节决定成败,这题也挺值得记录下来的,话不多嗦,看题

题的目标很简单,就是求两个正整数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:

? + ? = ?

 其他正常的我不说,对于这题最恶心的地方总结一下并给出解决方法

有些特殊案例过不了也就是在这个地方!!

对于数据的输入,这里一定一定要看清A和B的区别!!A可以为空字符串!第一个空格后面都是B!

因此我们在输入时应该注意假如A为空字符串的情况,此时用cin呀scanf呀都不好读入,因为cin会跳过前面的空格直到读到字符,如图

因此我在网上找那些先cin在getchar()吸收空格在getline这种说法,无法解决这个A为空串时的问题。最好的方法应该是直接当一行大字符串读入然后去找第一个空格,把前面的截掉就是A,后面的就都算B,这样最简单,因为可以判断这个大字符串假如第一个就是空格,那A就是空字符串,这样就解决了判断A是否为空字符串的问题

这里只给让我debug最久的一个步骤,剩下对于大字符串具体的操作处理方法这里给出详细代码

代码如下:

#include<iostream>
#include<string>
using namespace std;
bool a_ifsuit = true, b_ifsuit = true;//这里设置两个布尔数组判断a和b是否满足题意需要保留下来
int sum1, sum2;//设置a和b为数字时表示的值int main()
{string S;//由于a可以为空字符串,我们直接输入一行来处理getline(cin, S);//处理S的过程for (int i = 0; i < S.size(); i++) {//从前往后遍历找a,到第一个空格停止if (S[i] == ' ') {//找到a的位置之后,就是对a的判断以及转化if (i == 0) a_ifsuit = false;int base = 1;for (int j = i - 1; j >= 0; j--) {//假如找到不是代表数字的字符直接退出循环if (S[j] < '0' || S[j]>'9') {a_ifsuit = false;break;}//否则把每个数字从后往前迭代加起来,相当于个位十位百位等等一个一个加,不同位数乘以不同的base值else {sum1 += base * (S[j]-'0');base *= 10;}}//判断加起来的数是否在题给的区间if (sum1 > 1000 || sum1 <= 0) a_ifsuit = false;//此时空格后面的就都是b了,这里和上面一样判断b假如都是数字就转化bbase = 1;//由于b也是从个位开始计算和因此这里把base值设回1for (int j = S.size() - 1; j > i; j--) {if (S[j] < '0' || S[j]>'9') {b_ifsuit = false;break;}else {sum2 += base * (S[j] - '0');base *= 10;}}if (sum2 > 1000 || sum2 <= 0) b_ifsuit = false;//最后通过a和b是否保留下来数字进行输出if (a_ifsuit && b_ifsuit) cout << sum1 << " + " << sum2 << " = " << sum1 + sum2;else if (a_ifsuit && !b_ifsuit) cout << sum1 << " + ? = ?";else if (!a_ifsuit && b_ifsuit) cout << "? + " << sum2 << " = ?";else cout << "? + ? = ?";break;}}return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/690721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK3568平台开发系列讲解(Linux系统篇)内核中断机制

🚀返回专栏总目录 文章目录 一、注册中断处理程序二、下半部的概念2.1、Tasklet作为下半部2.2、工作队列作为下半部2.3、Softirq作为下半部沉淀、分享、成长,让自己和他人都能有所收获!😄 📢中断是设备中止内核的一种方法,告诉内核发生了有趣或重要的事情。这些在Linu…

docker环境常用容器安装

目录 1.安装partainer 2.安装myql 3.安装redis 4.安装Minio 5.安装zibkin 6.安装nacos 7.安装RabbitMq 8.安装RocketMq 8.1启动service 8.2修改对应配置 8.3启动broker 8.4启动控制台 9.安装sentinel 10.安装elasticsearch 11.安装Kibana 12.安装logstash/file…

《UE5_C++多人TPS完整教程》学习笔记14 ——《P15 创建我们自己的子系统(Creating Our Own Subsystem)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P15 创建我们自己的子系统&#xff08;Creating Our Own Subsystem&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&…

three.js 3D可视化地图

threejs地图 可视化地图——three.js实现 this.provinceInfo document.getElementById(provinceInfo); // 渲染器 this.renderer new THREE.WebGLRenderer({antialias: true }); this.renderer.setSize(window.innerWidth, window.innerHeight); this.container.appendChild…

Linux下如何配置环境变量

在Linux下配置环境变量通常有几种方法&#xff0c;具体取决于你希望将环境变量设置为全局还是仅对当前会话有效。以下是一些常见的方法&#xff1a; 永久性全局配置&#xff1a;要使环境变量在所有用户和会话中永久生效&#xff0c;可以编辑 /etc/environment 文件。在文件中添…

Open CASCADE学习|TopoDS_Vertex与gp_Pnt相互转化

目录 gp_Pnt TopoDS_Vertex 关系和转换 使用场景 在Open CASCADE Technology (OCCT)中&#xff0c;TopoDS_Vertex和gp_Pnt是两种不同的数据类型&#xff0c;用于表示三维空间中的点。它们有不同的用途和特性&#xff1a; gp_Pnt gp_Pnt是OCCT几何库&#xff08;Geom&…

php伪协议之phar

一.phar协议 用于将多个 PHP 文件、类、库、资源&#xff08;如图像、样式表&#xff09;等打包成一个单独的文件。这个归档文件可以像其他 PHP 文件一样被包含&#xff08;include&#xff09;或执行。PHAR 归档提供了一种方便的方式来分发和安装 PHP 应用程序和库&#xff0c…

今日Java小练习

题目描述一 计算保存日期的那一年的所有天数 解题思路 分别截取日期的年月日保存为int型定义数组保存1到12月的天数&#xff08;或使用LocalDate的getDayOfMonth方法直接计算&#xff09;判断如果是闰年二月天数加1累加当前月份前所有月份的天数和用之前累加的天数加上当前月的…

ClickHouse学习

ClickHouse是由C编写的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;主要用来在线分析处理查询&#xff08;OLTP&#xff09;&#xff0c;能够用Sql查询生成的实时数据分析报告。 适用场景 大多数是读请求 、数据总是批量写入 、不更新或少更新数据、每次都是读取大…

机器学习中为什么需要梯度下降

在机器学习中&#xff0c;梯度下降是一种常用的优化算法&#xff0c;用于寻找损失函数的最小值。我们可以用一个简单的爬山场景来类比梯度下降的过程。 假设你被困在山上&#xff0c;需要找到一条通往山下的路。由于你是第一次来到这座山&#xff0c;对地形不熟悉&#xff0c;你…

Python——元组

一、元组特性介绍 元组和列表⼀样&#xff0c;也是⼀种序列类型的数据。 唯⼀的不同是&#xff0c;元组是相对不可变的。 二、⾼效创建元组 In [1]: t1 () # 创建 空 元素的元组In [2]: type(t1) Out[2]: tuple有元素的元组实际上是使⽤英⽂的逗号创建的 In [3]:…

【sgCreateTableColumn】自定义小工具:敏捷开发→自动化生成表格列html代码(表格列生成工具)[基于el-table-column]

源码 <template><!-- 前往https://blog.csdn.net/qq_37860634/article/details/136126479 查看使用说明 --><div :class"$options.name"><div class"sg-head">表格列生成工具</div><div class"sg-container"…

RSA加密,解密,加签及验签

目录 1.说明 2.加密和加签的区别 3.后端加密&#xff0c;解密&#xff0c;加签及验签示例 4.前端加密&#xff0c;解密&#xff0c;加签及验签示例 5.前端加密&#xff0c;后端解密&#xff0c;前端加签&#xff0c;后端验签 6.注意事项 1.说明 RSA算法是一种非对称加密…

【JavaScript】输入输出语法

目录 一、输出语法 二、输入语法 一、输出语法 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>D…

Java解决石子游戏问题

Java解决石子游戏问题 01 题目 Alice 和 Bob 用几堆石子在做游戏。一共有偶数堆石子&#xff0c;排成一行&#xff1b;每堆都有 正 整数颗石子&#xff0c;数目为 piles[i] 。 游戏以谁手中的石子最多来决出胜负。石子的 总数 是 奇数 &#xff0c;所以没有平局。 Alice 和…

Netty学习------2024/02/19

non-blocking io 非阻塞 IO 1. 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c; 可以从 channel 将数据读入 buffer&#xff0c;也可以将 buffer 的数据写入 channel&#xff0c; 而之前的 stream 要么是输…

【Linux系列】超算作业调度系统批量取消作业介绍

在使用HPC跑模型时常常需要批量取消提交的job&#xff0c;本文将三种常见的作业调度系统的批量取消作业方法进行介绍&#xff0c;方便平时使用。 一、Slurm Slurm取消/删除作业的命令为scancel&#xff0c;其基本的使用方法有&#xff1a; 命令说明scancel < jobid >删…

HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-I2C

目录 一、 I2C 概述二、I2C 模块相关API三、接口调用实例四、I2C HDF驱动开发4.1、开发步骤(待续...) 坚持就有收获 一、 I2C 概述 I2C&#xff08;Inter Integrated Circuit&#xff09;集成电路间总线是由 Philips 公司开发的一种简单、双向二线制同步串行总线。I2C 以主从方…

面试题:链表相交

链表相交 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 思路 这个题目有2个思路&#xff0c;我先说容易想到的思路 对齐链表…

有关光猫、路由器、交换机、网关的理解

前提 在了解计算机网络的过程中&#xff0c;出现了这四个名词&#xff1a;光猫、路由器、交换机、网络。有点模糊&#xff0c;查阅互联网相关资料&#xff0c;进行整理。如有错误&#xff0c;欢迎大家批评指正。 光猫 首先光猫是物理存在的&#xff0c;大家在家里应该都可以…