32位平台下, 各种有符号型与无符号型变量所可以表示的范围大小:
有符号型:
short 两个字节,范围为-2^15~(2^15-1)
int 四个字节,范围为-2^31~(2^31-1)
long 四个字节,范围为-2^31~2^31-1
无符号型:最高位不表示符号位
unsigned short 两个字节,范围为0~2^16-1
unsigned int 四个字节,范围为0~2^32-1
unsigned long 四个字节,范围为0~2^32-1
实型变量:
分单精度 float 和双精度 double 两种形式:
float 四个字节,提供7~8位有效数字。
有符号型:
short 两个字节,范围为-2^15~(2^15-1)
int 四个字节,范围为-2^31~(2^31-1)
long 四个字节,范围为-2^31~2^31-1
无符号型:最高位不表示符号位
unsigned short 两个字节,范围为0~2^16-1
unsigned int 四个字节,范围为0~2^32-1
unsigned long 四个字节,范围为0~2^32-1
实型变量:
分单精度 float 和双精度 double 两种形式:
float 四个字节,提供7~8位有效数字。
double 八个字节,提供15~16位有效数字。
Solution 1:
class Solution {
public:
int reverse(int x) {
string sx = to_string(x);
string conv_sx;
long long conv_x;//变成longlong就好了,输出的时候还是int
int length = sx.size();
for( int i = length-1; i >= 0; i --)
{
conv_sx += sx[i];
}
std::stringstream out;
out<<conv_sx;
out>>conv_x;
// int num=atoi(str.c_str());
// int conv_x = atoi(conv_sx.c_str());
if(conv_x >= - pow(2,31) && conv_x <= pow(2,31)-1)
{
if(x > 0)
return conv_x;
else
return -conv_x;
}
else
return 0;
}
};
Solution 2:一种效率比较高的做法
逐位读取反转,在加上最后一位数之前,判断是否越过int的界限
class Solution {
public:
int reverse(int x) {
int res = 0;
while(x!=0){
if(res>INT_MAX/10||res<INT_MIN/10){
return 0;
}
res = res*10 + x%10;
x = x/10;
}
return res;
}
};