• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > LeetcodeReverseInteger中的溢出处理

LeetcodeReverseInteger中的溢出处理

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了溢出处理,化疗药物溢出处理流程,细胞毒药物溢出处理,html溢出处理,cad堆栈溢出怎么处理等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:Leetcode Reverse Integer 中的溢出处理
描述:

原题有这样的提示

“Did you notice that the reversed integer might overflow? Assume the input is a 32-bit integer, then the reverse of 1000000003 overflows. How should you handle such cases?”

看到有人写了一个这样的答案

int reverse(int x) {
    int flag=x>0?1:-1,res=0;
    x=x>0?x:-x;
    while(x>0){
        if((2147483647.0-x%10)/10<res)return 0;
        res=res*10+x%10;
        x=x/10;
    }
    return res*flag;
}

这一句 if((2147483647.0-x%10)/10<res)return 0; 可以起到检查int x是否超出int的范围2147483647 这样的作用吗,能否详解一下?

这一句 if((2147483647.0-x%10)/10<res)return 0; 每一次循环都会轮一遍,那么它究竟是判断输入的x是否超出int,还是判断每一轮的结果result是否超出int。其实我一开始一直在想的是如何判断输入的int x是否溢出。但是好像溢出不仅仅只有负数的情况还有溢出过多只取后面几位的情况。

还有别的好方法可以判断输入的一个数是否超出int范围的方法吗?


解决方案1:

它判断的是每轮的结果是否超过int
if((2147483647.0-x%10)/10<res)return 0;
变一下形,就是 2147483647.0 < res * 10 + x % 10
上面不等式的右边是每轮的结果,但是因为已经超过Integer.MAX_VALUE,为了避免溢出,用了

解决方案2:

(2147483647.0-x%10)/10<res 即是 2147483647.0 <(double)res*10 + x%10, 即转成了double型 做判断.

我的做法是直接 用long型:

public int reverse(int x) {
    int sign = 1;
    if(x < 0){
        sign = -1;
        x *= -1;
    }

    long result = 0;
    while(x != 0){
        result = result * 10 + x % 10;
        if(sign * result > Integer.MAX_VALUE ||
                sign * result < Integer.MIN_VALUE)
            return 0;
        x = x / 10;
    }

    return (int)result * sign;


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • LeetcodeReverseInteger中的溢出处理

相关文章

  • 2017-06-07 python多线程python多线程加了join函数为什么会变慢?
  • 2017-06-07 新手咨询下怎么安装itchat库
  • 2017-06-07 关于JBOSS中JMS远程消费的问题?
  • 2017-06-07 七牛云储存二级域名出现拒绝访问
  • 2017-06-07 求助!Nvidia显卡如何安装配置OPENCL?
  • 2017-06-07 jsf下拉列表默认选择值
  • 2017-06-07 正则校验规则,保留小数点后两位的方法?
  • 2017-06-07 ZeroClipboard为什么点击两次才能成功呢?上全部代码
  • 2017-06-07 Segmentfault这样的系统,最新问题的列表怎么做缓存
  • 2017-06-07 新人代码求解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Xml节点内容正则表达式替换
    • osx版本的mod_wsgi是不是只支持到python26
    • 笨方法学python的习题11,用python3编译时,为何只输出了一行呢?
    • 数组和vector的用法
    • 如何做web服务器
    • saveas是异步?
    • SDK,API,类库,有什么区别?
    • rubyonrails中module包含类和方法意义是什么?
    • mac系统上使用idea,但是svn一直连接不上公司的库,该怎么办?
    • Java中Timer类的使用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有