32位整数溢出处理-LeetCodeQ7:整数逆序
2018-01-18 13:26
721 查看
问题如下:给一个32位的整数,求它的逆序整数。Example 1:Input: 123
Output: 321
Example 2:Input: -123
Output: -321
Example 3:Input: 120
Output: 21注意:
这个问题假设限定整数不超过32位。如果逆序后的结果超过32位,则返回0.(如:1534236469的逆序为:9646324351。这个溢出了。)解答:刚开始我觉得难点是:整数溢出的部分不知道如何处理。写完之后点提交,报错的部分正是溢出的部分,于是我开始思考如何处理。其实很简单,判断生成的y是否溢出,32位的范围是:(2^31 - 1) ~ (-2^31),可以写个for循环算出来,也可以直接按计算器(为了偷懒),于是问题就变成了只需要做下面的判断即可:if(retV > 2147483647 || retV < -2147483648)
return 0;不过还有一个注意点:生成的retV不能用int,否则还没判断就溢出了。下面是完整的解答:class Solution {
public int reverse(int x) {
long y = 0;
int yu = x % 10;
int chu = x / 10;
while(yu != 0 || chu != 0) {
y = y * 10 + yu;
yu = chu % 10;
chu = chu / 10;
}
if(y > 2147483647 || y < -2147483648)
return 0;
return (int)y;
}
}
Output: 321
Example 2:Input: -123
Output: -321
Example 3:Input: 120
Output: 21注意:
这个问题假设限定整数不超过32位。如果逆序后的结果超过32位,则返回0.(如:1534236469的逆序为:9646324351。这个溢出了。)解答:刚开始我觉得难点是:整数溢出的部分不知道如何处理。写完之后点提交,报错的部分正是溢出的部分,于是我开始思考如何处理。其实很简单,判断生成的y是否溢出,32位的范围是:(2^31 - 1) ~ (-2^31),可以写个for循环算出来,也可以直接按计算器(为了偷懒),于是问题就变成了只需要做下面的判断即可:if(retV > 2147483647 || retV < -2147483648)
return 0;不过还有一个注意点:生成的retV不能用int,否则还没判断就溢出了。下面是完整的解答:class Solution {
public int reverse(int x) {
long y = 0;
int yu = x % 10;
int chu = x / 10;
while(yu != 0 || chu != 0) {
y = y * 10 + yu;
yu = chu % 10;
chu = chu / 10;
}
if(y > 2147483647 || y < -2147483648)
return 0;
return (int)y;
}
}
相关文章推荐
- 64位Fedora运行32位C++程序中int精度溢出处理
- 整数计算溢出的处理
- 整数数组中最大子数组的和有溢出如何处理
- (10.31)反转一个整数数字,输入为32位signed integer。反转后溢出则返回 0 。
- 对5位以内的正整数处理(判断他是几位数、顺逆序输出)
- [LeetCode 7]Reverse Integer(处理整数溢出)
- 整数逆序输出,并且判断逆序后的整数是否溢出
- Java中整数溢出的问题:int i=1000000;i*i为何等于-727379968,Java是如何处理溢出的?
- LeetCode7——Reverse Integer(将一个整数反转,注意溢出的处理)
- 64位Fedora运行32位C++程序中int精度溢出处理
- [C] 跨平台使用Intrinsic函数范例3——使用MMX、SSE2指令集 处理 32位整数数组求和
- [C] 跨平台使用Intrinsic函数范例3——使用MMX、SSE2指令集 处理 32位整数数组求和
- java 字符串转化为整数溢出问题处理
- 请实现一个反转32位有符号整数的函数,例如123—>321,-123->-321,120->21,如果溢出就返回0(面试题)
- 将一整数逆序后放入一数组中
- win8开发(16)——如何处理溢出文本
- 算法-32位正整数,只保留最高位的1比特,其余比特清零
- android 内存溢出的处理
- (面试题)请用C语言实现在32位环境下,两个无符号长整数相加的函数,相加之和不能存储在64位变量中
- 输入任意两个整数,求两者的商。使用异常处理机制捕获零除异常和参数格式异常