力扣和vs结果不同


      这是vs的代码

#include
using namespace std;
int  str2num(string  s)
{
	int num;
	stringstream ss(s);
	ss >> num;
	return num;
}
int reverse(int x) {
	char s[40] = { "" };
	string str = "";
	int i = 0, j, result = 0;
	if (x < 0) {
		//先考虑x小于0的情况
		x = -x; //把x变正再处理
		while (x > 0) {
			s[i] = x % 10 + '0';//%10是清除最后一位
			x = x / 10; //x/10是把最后一位不断左移
			str += s[i];
			i++;
		}
		//从这个循环出来,那么字符数组就把整数保存好了
		//实际上,这就要检查存不存在越界的可能
		//pow(2,31) = 2147483648
		if (i > 10) {
			//这是一定会越界的
			return 0;
		}
		else if (i == 10) {
			//这就得对此时的数进行判断了,这步是很复杂的
			if (str.compare("2147483648") == 0) {
				//恰好相等
				return -2147483648;
			}
			else if (str.compare("2147483648") == 1) {
				//大于
				return 0;
			}
			else {
				//这种情况是i=10 并且是没法for算的
			  return -str2num(str);
			}
		}
		//能出来说明是小于了
		//注意,保存的时候实际上就是倒着保存的
		else
			return -str2num(str);
	}
else if (x > 0) {
		//开始处理x>0的情况
		while (x > 0) {
			s[i] = x % 10 + '0';//%10是清除最后一位
			x = x / 10; //x/10是把最后一位不断左移
			str += s[i];
			i++;
		}
		//从这个循环出来,那么字符数组就把整数保存好了
		if (i > 10) {
			//这是一定会越界的
			return 0;
		}
		else if (i == 10) {
			//这就得对此时的数进行判断了,这步是很复杂的
			if (str.compare("2147483647") == 0) {
				//恰好相等
				return 2147483647;
			}
			else if (str.compare("2147483647") == 1) {
				//大于
				return 0;
			}
			else {
				//i=10 并且还可以正常输出
				return str2num(str);
			}
		}
		else 
			return str2num(str);
	}
	return 0;
}
int main() {
	int x = 1534236469;
	cout << reverse(x) << endl;
}
		
class Solution {
public:
	int  str2num(string  s)
{
	int num;
	stringstream ss(s);
	ss >> num;
	return num;
}
int reverse(int x) {
	char s[40] = { "" };
	string str = "";
	int i = 0, j, result = 0;
	if (x < 0) {
		//先考虑x小于0的情况
		x = -x; //把x变正再处理
		while (x > 0) {
			s[i] = x % 10 + '0';//%10是清除最后一位
			x = x / 10; //x/10是把最后一位不断左移
			str += s[i];
			i++;
		}
		//从这个循环出来,那么字符数组就把整数保存好了
		//实际上,这就要检查存不存在越界的可能
		//pow(2,31) = 2147483648
		if (i > 10) {
			//这是一定会越界的
			return 0;
		}
		else if (i == 10) {
			//这就得对此时的数进行判断了,这步是很复杂的
			if (str.compare("2147483648") == 0) {
				//恰好相等
				return -2147483648;
			}
			else if (str.compare("2147483648") == 1) {
				//大于
				return 0;
			}
			else {
				//这种情况是i=10 并且是没法for算的
			  return -str2num(str);
			}
		}
		//能出来说明是小于了
		//注意,保存的时候实际上就是倒着保存的
		else
			return -str2num(str);
	}
	else if (x > 0) {
		//开始处理x>0的情况
		while (x > 0) {
			s[i] = x % 10 + '0';//%10是清除最后一位
			x = x / 10; //x/10是把最后一位不断左移
			str += s[i];
			i++;
		}
		//从这个循环出来,那么字符数组就把整数保存好了
		if (i > 10) {
			//这是一定会越界的
			return 0;
		}
		else if (i == 10) {
			//这就得对此时的数进行判断了,这步是很复杂的
			if (str.compare("2147483647") == 0) {
				//恰好相等
				return 2147483647;
			}
			else if (str.compare("2147483647") == 1) {
				//大于
				return 0;
			}
			else {
				//i=10 并且还可以正常输出
				return str2num(str);
			}
		}
		else 
			return str2num(str);
	}
	return 0;
   }  
};

上面的是力扣代码,复制过去的,但就是运行错误,这是什么情况

你可能感兴趣的:(leetcode,算法,职场和发展)