正整数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.hqwc.cn/news/478208.html

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

相关文章

【深入理解设计模式】单例设计模式

单例设计模式 概念&#xff1a; 单例模式&#xff08;Singleton Pattern&#xff09;是 Java 中最简单的设计模式之一。 单例设计模式是一种创建型设计模式&#xff0c;其主要目的是确保类在应用程序中的一个实例只有一个。这意味着无论在应用程序的哪个位置请求该类的实例&a…

左右联动布局效果

效果图&#xff1a; <template><el-dialog :modelValue"modelValue" :before-close"close" fullscreen :close-on-click-modal"false"><div class"farmer_detail"><div class"info_content"><di…

数论 - 高斯消元

文章目录 一、高斯消元解线性方程组1.题目描述输入格式输出格式数据范围输入样例&#xff1a;输出样例&#xff1a; 2.算法思路3.代码 二、高斯消元解异或线性方程组1.题目描述输入格式输出格式数据范围输入样例&#xff1a;输出样例&#xff1a; 2.算法思路3.代码 数学上&…

微信小程序swiper 视频中间大,两边小,轮播滑到中间视频自动播放组件教程

静态效果&#xff1a; 进入下面小程序可以体验效果&#xff0c;点击底部 看剧 栏目 一、创建小程序组件 二、代码 1、WXML <view class"swiper-wrapper" style"background-image:url(/asset/image/hot-banner.jpg);background-size: 100% 100%;">…

USB-C音频转接器:实现边充电边听歌的新选择 | LDR6020P

随着科技浪潮的推进&#xff0c;Type-C接口已逐渐成为电子设备的主流选择&#xff0c;以其正反随意插、高速传输和强大功能等独特优势&#xff0c;在日常生活中占据越来越重要的地位。而Type-C音频转接器&#xff0c;作为连接Type-C接口与音频设备的桥梁&#xff0c;正引领着音…

appium实现自动化测试原理

目录 1、Appium原理 1.1、Android Appium原理图文解析 1.1.2、原理详解 1.1.2.1、脚本端 1.1.2.2、appium-server 1.1.2.3、中间件bootstrap.jar 1.1.2.4、驱动引擎uiautomator 1.2、 IOS Appium原理 1、Appium原理 1.1、Android Appium原理图文解析 执行测试脚本全过…

Windows制作Ubuntu的U盘启动盘

概要&#xff1a; 本篇演示在Windows10中制作Ubuntu22.04的U盘启动盘 一、下载Ubuntu22.04的iso文件 在浏览器中输入https://ubuntu.com去Ubuntu官网下载Ubuntu22.04的iso文件 二、下载Ultraiso 在浏览器中输入https://www.ultraiso.com进入ultraiso官网 点击FREE TRIAL&a…

阿里云服务器操作系统有哪些?如何选择?

阿里云服务器镜像怎么选择&#xff1f;云服务器操作系统镜像分为Linux和Windows两大类&#xff0c;Linux可以选择Alibaba Cloud Linux&#xff0c;Windows可以选择Windows Server 2022数据中心版64位中文版&#xff0c;阿里云服务器网aliyunfuwuqi.com来详细说下阿里云服务器操…

CDP和Chrome

CDP和Chrome CDP和WebDriver Protocol WebDriver和 Chrome DevTools Protocol&#xff08;CDP&#xff09; 是用于自动化浏览器的两个主要协议&#xff0c;大多数的浏览器自动化工具都是基于上述其中之一来实现的。可以通过这两种形式来和浏览器交互&#xff0c;通过代码来控…

Python:多线程(threading)的学习和使用详解

概要 在Python中,threading库提供了一种简单且方便的方式来实现多线程编程。通过使用线程,可以在程序中并行执行多个任务,提高程序的性能和响应性。 了解线程 线程是程序执行的最小单元,是操作系统能够进行运算调度的基本单位。与进程不同,线程在同一进程下共享相同的内…

Redis篇----第六篇

系列文章目录 文章目录 系列文章目录前言一、Redis 的持久化机制是什么?各自的优缺点?二、Redis 常见性能问题和解决方案:三、redis 过期键的删除策略?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章…

极狐GitLab 如何配置多个 LDAP?

本文仅适用于极狐GitLab私有化部署场景。 场景化痛点 极狐GitLab 的多 LDAP 接入功能解决了企业在以下场景中可能遇到的痛点&#xff1a; 多个组织/部门的整合&#xff1a;在大型企业或跨国公司中&#xff0c;往往存在多个组织或部门&#xff0c;它们可能拥有独立的 LDAP 服务…