注意int类型数据相加的溢出
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类型数据相加的溢出相关推荐
- 实验五:任意输入10个int类型数据,排序输出,再找出素数
一.实验代码如下: 1 /*本程序用来任意输入10个int类型数据,排序输出,再找出素数*/ 2 3 package jiangli; 4 5 import java.util.Scanner; 6 ...
- 使用构造方法 重载 Scanner键盘录入的方式,做一个两个int类型的相加 和三个double类型的计算器
import java.util.Scanner; public class Calculator { // 使用构造方法 重载 Scanner键盘录入的方式,做一个两个int类型的相加 和三个dou ...
- Scala语言学习-02-实现十进制转换为二进制(Int类型数据)
一.测试环境 名称 版本 操作系统 Red Hat Enterprise Linux Server release 7.9 (Maipo) CPU 12th Gen Intel® Core™ i7-1 ...
- Arduino 串口数据接收并打印输出int类型数据
Arduino串口接收并打印输出int类型数据 相关文章 <Arduino读取串口接收到的数据并发送数据> <Arduino 基于Stream类的函数详细说明> <Ard ...
- Int类型数据的序列化以及反序列化(与Java服务器通讯预热)
游戏前端,避免不了的跟服务器通讯,其实游戏的大部分逻辑都在服务端,并不在客户端,所以需要跟服务端通讯"协商"一些逻辑,既然通讯,就少不了的传输,传输之前又要序列化,这篇博客主要讲一 ...
- int 类型数据的最大值,最小值及其十六进制表示方式
用以下两行代码可以知道自己的电脑下,int数据类型的最大值,最小值 cout << "int数据类型最大值:" << (numeric_limits< ...
- 五、任意输入10个int类型数据,排序输出,再找出素数
一.按由大到小的顺序输出10int型数据 输出结果: 二.输出素数 输出结果: 三.数组知识点 1.数组的定义 数组是一种数据结构,用来储存同一类型的集合.通过一个整型下标可以访问数组中的每一个值. ...
- 2个byte类型数据相加(转型问题的分析)
转自https://blog.csdn.net/alinshen/article/details/53571857 今天看到网上有网友问到关于final修饰的面试题目,题目如下: [java] vie ...
- java 获取int长度_java 获取int类型数据长度的方法?
展开全部 可以使用以下三种方法e69da5e6ba903231313335323631343130323136353331333366306466: 一.基于对数的解决方案: valueOf 方法返回 ...
- java中将int类型数据存到数组中
//定义一个数据 int number = 123456; //定义一个数组 int[] arr = new int[8]; //通过观察这个代码,我们发现应该是可以通过循环改进的 int index ...
最新文章
- CS 就业寒冬?这里有一份面试必备基础知识
- 如何寻找蛋白和蛋白,基因和基因之间的相互作用---string
- 学习javascript 的一点感想
- 阿里云高可用-容灾解决方案
- 框架controller找不到_SpingBoot框架知识详解
- 大数据_MapperReduce_Hbase的优化_高可用 预分区_防止数据倾斜_JAVAAPI创建预分区---Hbase工作笔记0026
- 医学影像设备学_什么是医学影像专业?
- EXCEL VBAProject密码破解 工作表密码破解
- JavaScript创建cookie
- 怎样修改美国的服务器节点,美国云服务器节点怎么
- hp/博科光纤交换机配置小记
- 北京地区主要旅行社目录
- 计算机网络—IP地址及其表示方法
- 如何将低dpi图片升级到300dpi
- 详解RAI I、C++中的智能指针以及一些常见的面试题
- 微信公众号怎么生成能追踪效果的二维码?
- Python tkinter窗口最大化处理
- android 表情的输入 Unicode实现表情展示 无需图片素材及相关解析
- java tika pdf_【Tika基础教程之一】Tika基础教程
- 计算机专业就业自我推荐意见,计算机科学与技术专业自荐书