题目描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123 输出: 321
示例 2:
输入: -123 输出: -321
示例 3:
输入: 120 输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解题思路:因为这道题涉及到整型数的溢出,首先想到的就是将整型转换为字符串类型,对字符串类型进行反转后再转化未整型。
这里有一个问题,如果全程都使用int类型的数据,则再字符串转化为int的那个过程会出现问题,反转之后数据一旦大于INT_MAX或者小于INT_MIN,如果结构的数据类型是int,则会自动截取,而且也不能使用atoi来进行数据的转换,问题也是一样,一旦数据超出了int的范围,就会自动截取。所以这里我们使用atoll,将字符串转化为long long整型。
class Solution { public: int reverse(int x) { int data = x; bool sign = true; if (data < 0) { data = data * -1; sign = false; } string str = to_string(data); int i = 0; int j = str.size()-1; while(i<j) swap(str[i++],str[j--]); long long reverse_data = atoll(str.c_str()); //这里是关键,使用atoll函数将字符串转化为long long 整型变量,超过INT_MAX也不会溢出 if(!sign) reverse_data = reverse_data * -1; if( (reverse_data>INT_MAX) || (reverse_data<INT_MIN)) reverse_data = 0; return reverse_data; } };