LeetCode Reverse Integer

原创 2013年12月01日 21:21:02

主要是考虑溢出,主要问题也是解决溢出,判断溢出。自己写个带参数(引用参数)的,不被识别,把参数去了确AC了。自己知道就行了。

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中Reverse Integer一题的理解

题目如下: Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321...

【LeetCode7】【Reverse Integer】java中整形正负表示的一些思考

7.Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, r...

Reverse Integer | LeetCode OJ

LeetCode Level Easy Rever Integer

Reverse Integer leetcode

Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 c...

LeetCode | 7)Reverse Integer

题目Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 H...

【leetcode c++】Reverse Integer

题目很短,也很简单。 Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -3...
  • hqq39
  • hqq39
  • 2015年06月07日 19:44
  • 375

LeetCode 7 — Reverse Integer(C++ Java Python)

题目:http://oj.leetcode.com/problems/reverse-integer/ Reverse digits of an integer. Example1: x = 1...

LeetCode Reverse Integer

Reverse Integer Total Accepted: 61132 Total Submissions: 219035 My Submissions Question Solution R...

LeetCode OJ - Reverse Integer

Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 c...
  • cinrry
  • cinrry
  • 2016年01月08日 18:13
  • 182

leetcode Reverse Integer java基本编程学习笔记(一)

时隔一个月,再次拾起leetcode开始刷题。 我这种人吧,总是做一段时间,某天因为某个原因给搁置了,然后就没有然后了,等在想起来总能给自己那段时间寻找"合理"的借口,这种人是不是要一辈子成为lose...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode Reverse Integer
举报原因:
原因补充:

(最多只允许输入30个字)