1、在想不到的地方出了int相加溢出的错误。

在做力扣228. 汇总区间时,出现了这个错误。
代码如下

class Solution {public:vector<string> summaryRanges(vector<int>& nums) {if(!nums.size()) return {};vector<string> ans;for(int i=0;i<nums.size(); ){int temp=nums[i],k=0;while(i<nums.size()&&nums[i]==temp+k){i++;k++;}string str=to_string(temp);if(k>1) str+=("->"+to_string(temp+k-1));//第13行ans.push_back(str);}return ans;}
};

这份代码,可以通过绝大多数样例。
但是样例[-2147483648,-2147483647,2147483646,2147483647]通不过,这是因为,当i=2时,temp先被赋值为了nums【2】,即2147483646,之后进行while循环,进行2次,就推出了循环,因为此时i已经是nums的最大的数据下标了,此时k被while循环修改为了2,之后在if判断语句中,要加上temp+k-1这个数变成的string,这个思路没有问题,但是,问题出在了数据本身,就是,此时temp已经是2147483646,而int类型的数据的最大值为(1<<31)-1,即十进制的2147483647,当temp先计算temp+k,即temp+2时,溢出了。我们可以修改一下程序,使得temp先计算-1之后再加k,即第13行的代码修改为 if(k>1) str+=("->"+to_string(temp-1+k));
看似没有问题了,但是,问题又来了,还是通不过这个样例,这是因为,此时对于这个样例的后两个数据,这么修改程序之后,是可以通过的,但是前两个数据不可以。仔细分析以下,当i=0时,将temp赋值为nums【0】,即为-2147483648,之后通过一个while循环,将k修改为了2,此时执行到13行的if语句,会发现,是先计算的temp-1。int类型在内存中的存储是4个字节,并且是以二进制的补码形式进行存放的,所以其范围为
FFFFFFFFH—>7FFFFFFFH,也就是-2147483648—>2147483647,当先计算temp-1,时,会下溢。
解决方法为
将k-1打包起来,先计算k-1,即修改为if(k>1) str+=("->"+to_string(temp+(k-1));
此时就可以处理这种极端的例子了。
力扣比pat好在可以看到自己的程序卡在了哪一个样例上。

注意int类型数据相加的溢出相关推荐

  1. 实验五:任意输入10个int类型数据,排序输出,再找出素数

    一.实验代码如下: 1 /*本程序用来任意输入10个int类型数据,排序输出,再找出素数*/ 2 3 package jiangli; 4 5 import java.util.Scanner; 6 ...

  2. 使用构造方法 重载 Scanner键盘录入的方式,做一个两个int类型的相加 和三个double类型的计算器

    import java.util.Scanner; public class Calculator { // 使用构造方法 重载 Scanner键盘录入的方式,做一个两个int类型的相加 和三个dou ...

  3. Scala语言学习-02-实现十进制转换为二进制(Int类型数据)

    一.测试环境 名称 版本 操作系统 Red Hat Enterprise Linux Server release 7.9 (Maipo) CPU 12th Gen Intel® Core™ i7-1 ...

  4. Arduino 串口数据接收并打印输出int类型数据

    Arduino串口接收并打印输出int类型数据 相关文章 <Arduino读取串口接收到的数据并发送数据> <Arduino 基于Stream类的函数详细说明> <Ard ...

  5. Int类型数据的序列化以及反序列化(与Java服务器通讯预热)

    游戏前端,避免不了的跟服务器通讯,其实游戏的大部分逻辑都在服务端,并不在客户端,所以需要跟服务端通讯"协商"一些逻辑,既然通讯,就少不了的传输,传输之前又要序列化,这篇博客主要讲一 ...

  6. int 类型数据的最大值,最小值及其十六进制表示方式

    用以下两行代码可以知道自己的电脑下,int数据类型的最大值,最小值 cout << "int数据类型最大值:" << (numeric_limits< ...

  7. 五、任意输入10个int类型数据,排序输出,再找出素数

    一.按由大到小的顺序输出10int型数据 输出结果: 二.输出素数 输出结果: 三.数组知识点 1.数组的定义 数组是一种数据结构,用来储存同一类型的集合.通过一个整型下标可以访问数组中的每一个值. ...

  8. 2个byte类型数据相加(转型问题的分析)

    转自https://blog.csdn.net/alinshen/article/details/53571857 今天看到网上有网友问到关于final修饰的面试题目,题目如下: [java] vie ...

  9. java 获取int长度_java 获取int类型数据长度的方法?

    展开全部 可以使用以下三种方法e69da5e6ba903231313335323631343130323136353331333366306466: 一.基于对数的解决方案: valueOf 方法返回 ...

  10. java中将int类型数据存到数组中

    //定义一个数据 int number = 123456; //定义一个数组 int[] arr = new int[8]; //通过观察这个代码,我们发现应该是可以通过循环改进的 int index ...

最新文章

  1. CS 就业寒冬?这里有一份面试必备基础知识
  2. 如何寻找蛋白和蛋白,基因和基因之间的相互作用---string
  3. 学习javascript 的一点感想
  4. 阿里云高可用-容灾解决方案
  5. 框架controller找不到_SpingBoot框架知识详解
  6. 大数据_MapperReduce_Hbase的优化_高可用 预分区_防止数据倾斜_JAVAAPI创建预分区---Hbase工作笔记0026
  7. 医学影像设备学_什么是医学影像专业?
  8. EXCEL VBAProject密码破解 工作表密码破解
  9. JavaScript创建cookie
  10. 怎样修改美国的服务器节点,美国云服务器节点怎么
  11. hp/博科光纤交换机配置小记
  12. 北京地区主要旅行社目录
  13. 计算机网络—IP地址及其表示方法
  14. 如何将低dpi图片升级到300dpi
  15. 详解RAI I、C++中的智能指针以及一些常见的面试题
  16. 微信公众号怎么生成能追踪效果的二维码?
  17. Python tkinter窗口最大化处理
  18. android 表情的输入 Unicode实现表情展示 无需图片素材及相关解析
  19. java tika pdf_【Tika基础教程之一】Tika基础教程
  20. 计算机专业就业自我推荐意见,计算机科学与技术专业自荐书

热门文章

  1. 查询快递单号物流,自动识别出物流是否签收
  2. 初恋失败让我学会推销自己
  3. 2021年全球专业油田化学品收入大约34600百万美元,预计2028年达到41640百万美元
  4. 322. Coin Change
  5. LSTM的优点和缺点
  6. 我如何选PHP开发工具(PHP IDE)
  7. itune音乐排行榜:法国周榜TOP100(2022年7月16日)
  8. html链接到word文档,word做html超链接
  9. 什么是EasyUI,如何使用EasyUI?--easyui的十二种用法
  10. VS_MFC:压缩文件存储空间