LeetCode Reverse Integer
2013-12-01 21:21
471 查看
主要是考虑溢出,主要问题也是解决溢出,判断溢出。自己写个带参数(引用参数)的,不被识别,把参数去了确AC了。自己知道就行了。
说明加法器工作的原理。比如
-20的二进制补码 = 11101100 -25的二进制补码 = 11100111
-20 11101100
+(-25) = + 11100111
-45 111010011
超出的最高位去掉后 = 11010011
-45 的补码刚好是 11010011,所以以上式子正确。
这个是说用两个符号位表示时,溢出可以有机器判断了http://www.softwarehistory.net/h/E_Comp_ZuchengYuanli/28.php
int reverse(int x,bool &flag) {//flag means if the result is overflow int signal=1; if (x<0) { signal=-1; } int temp,ret=0,newv=0; while(x!=0) { temp = x%10; x = x/10; if (x!=0) { newv = newv*10 + temp; } else//last bit may overflow { if (signal<0) { if ( 10*newv + temp >= 0) { flag = false; ret = -1; return ret; } ret = 10 * newv + temp; } else { if ( 10*newv + temp <= 0) { flag = false; ret = -1; return ret; } ret = 10 * newv + temp; } } } return ret; }花了将近俩个小时,判断何时溢出,若是两位符号位表示的话,机器可以好判断。但是我们的机器都是一位的,机器没法判断,都说负负相加若为正,或者正正相加为负时就是溢出,为什么是这样呢?正正相加可以理解,因为最高位符号位被进位占了,所以变负数了(当然都是补码表示了,负数的补码符号位也是1)。至于负负相加为什么能为正?负负相加时,补码的最高位都是一,若补码的第二高位也都是一的话,那么结果肯定是负数了,若第二高位不都是一(可能都是零),那么就不会产生进位,结果就为正了。至于什么时候第二高位是一的可能性大些,就是原来负数原码的第二高位小些(因为原码取反加一变补码呀),即负数的绝对值小些,这样最终的补码结果才有可能是负数,才不会溢出。所以当负数的绝对值越大,原码的前面的位就越大,补码的前面的位就越小,最后相加结果(加法器用补码表示这都知道)就没有向最高位的进位(因为第二高位没有进位),所以结果第一位就是零了,第一位前面的那个一因为无法表示舍去了。最后就是两个负数相加结果是正数,溢出啦。
说明加法器工作的原理。比如
-20的二进制补码 = 11101100 -25的二进制补码 = 11100111
-20 11101100
+(-25) = + 11100111
-45 111010011
超出的最高位去掉后 = 11010011
-45 的补码刚好是 11010011,所以以上式子正确。
这个是说用两个符号位表示时,溢出可以有机器判断了http://www.softwarehistory.net/h/E_Comp_ZuchengYuanli/28.php
相关文章推荐
- LeetCode刷题(C++)——Reverse Integer(Easy)
- Leetcode Q7:Reverse Integer
- leetcode(7) - Reverse Integer
- [LeetCode 7]Reverse Integer(处理整数溢出)
- Reverse Integer leetcode--JavaScript
- LeetCode Reverse Integer(C)
- [Leetcode7]之Reverse Integer
- Leetcode Oj Reverse Integer
- [LeetCode][7]Reverse Integer解析与位运算实现 -Java实现
- leetcode Reverse Integer
- 【LeetCode】Reverse digits of an integer
- Reverse Integer (LeetCode)
- LeetCode 7 - Reverse Integer
- LeetCode 7 Reverse Integer 这道题被血虐
- LeetCode:Reverse Integer
- leetcode 7: Reverse Integer
- LeetCode:Reverse Integer
- LeetCode之Reverse Integer
- 【leetcode】Reverse Integer(考虑溢出问题)
- Reverse Integer && Palindrome Number-LeetCode