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

2024-02-20 06:20

本文主要是介绍正整数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;
}

 

这篇关于正整数A+B(PTA团体天题练习题)细节题刨析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/727303

相关文章

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

dp算法练习题【8】

不同二叉搜索树 96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3输出:5 示例 2: 输入:n = 1输出:1 class Solution {public int numTrees(int n) {int[] dp = new int

vscode中使用go环境配置细节

1、在docker容器中下载了go的sdk 2、在/etc/profile.d/go.sh里填入如下内容: #!/bin/bashexport GOROOT=/home/ud_dev/goexport PATH=$GOROOT/bin:$PATH  3、设置go env go env -w GOPROXY=https://goproxy.cn,directgo env -w GO

使用WebP解决网站加载速度问题,这些细节你需要了解

说到网页的图片格式,大家最常想到的可能是JPEG、PNG,毕竟这些老牌格式陪伴我们这么多年。然而,近几年,有一个格式悄悄崭露头角,那就是WebP。很多人可能听说过,但到底它好在哪?你的网站或者项目是不是也应该用WebP呢?别着急,今天咱们就来好好聊聊WebP这个图片格式的前世今生,以及它值不值得你花时间去用。 为什么会有WebP? 你有没有遇到过这样的情况?网页加载特别慢,尤其是那

分享MSSQL、MySql、Oracle的大数据批量导入方法及编程手法细节

1:MSSQL SQL语法篇: BULK INSERT      [ database_name . [ schema_name ] . | schema_name . ] [ table_name | view_name ]         FROM 'data_file'        [ WITH       (      [ [ , ] BATCHSIZE = batch_siz

【LVI-SAM】激光雷达点云处理特征提取LIO-SAM 之FeatureExtraction实现细节

激光雷达点云处理特征提取LIO-SAM 之FeatureExtraction实现细节 1. 特征提取实现过程总结1.0 特征提取过程小结1.1 类 `FeatureExtraction` 的整体结构与作用1.2 详细特征提取的过程1. 平滑度计算(`calculateSmoothness()`)2. 标记遮挡点(`markOccludedPoints()`)3. 特征提取(`extractF

C语言练习题之 数组中出现次数超过一半的数

题目描述 给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。 数据范围:n≤50000,数组中元素的值0≤val≤10000 要求:空间复杂度:O(1),时间复杂度O(n) 输入描述: 保证数组输入非空,且保证有

Post-Training有多重要?一文带你了解全部细节

1. 简介 随着LLM学界和工业界日新月异的发展,不仅预训练所用的算力和数据正在疯狂内卷,后训练(post-training)的对齐和微调方法也在不断更新。InstructGPT、WebGPT等较早发布的模型使用标准RLHF方法,其中的数据管理风格和规模似乎已经过时。近来,Meta、谷歌和英伟达等AI巨头纷纷发布开源模型,附带发布详尽的论文或报告,包括Llama 3.1、Nemotron 340

算法练习题17——leetcode54螺旋矩阵

题目描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。  代码 import java.util.*;class Solution {public List<Integer> spiralOrder(int[][] matrix) {// 用于存储螺旋顺序遍历的结果List<Integer> result = new ArrayList

【项目日记】高并发内存池---细节优化及性能测试

终此一生,只有两种办法: 要么梦见生活,要么落实生活。 --- 勒内・夏尔 --- 高并发内存池---细节优化及性能测试 1 细节优化1.1 大块内存的申请处理1.2 配合定长池脱离使用new1.3 释放对象无需内存大小 2 调试Debug3 性能测试4 项目总结 1 细节优化 在前面的文章中我们已经实现了高并发内存池的申请内存逻辑和释放内存逻辑: