这道题难度不大,但是对于考虑溢出的题型很有参考价值。
int reverse(int x) {
int m, res = 0;
while (x != 0) {
m = x % 10; //余数
x /= 10;
//乘以10之前就进行判断,否则可能溢出
if (res > INT_MAX / 10 || (res == INT_MAX && m > 7)) return 0;
if (res < INT_MIN / 10 || (res == INT_MIN && m <-8)) return 0;
res = res * 10 + m;
}
return res;
}
拓展:
在<limits.h>头文件中定义如下的宏,用于表示各类型的限值。
#define CHAR_BIT 8 // number of bits in a char
#define SCHAR_MIN (-128) // minimum signed char value
#define SCHAR_MAX 127 // maximum signed char value
#define CHAR_MIN SCHAR_MIN // mimimum char value
#define CHAR_MAX SCHAR_MAX // maximum char value
#define SHRT_MIN (-32768) // minimum (signed) short value
#define SHRT_MAX 32767 // maximum (signed) short value
#define USHRT_MAX 0xffff // maximum unsigned short value
#define INT_MIN (-2147483647 - 1) // minimum (signed) int value
#define INT_MAX 2147483647 // maximum (signed) int value
#define UINT_MAX 0xffffffff // maximum unsigned int value
#define LONG_MIN (-2147483647L - 1) // minimum (signed) long value
#define LONG_MAX 2147483647L // maximum (signed) long value
#define ULONG_MAX 0xffffffffUL // maximum unsigned long value
#define LLONG_MAX 9223372036854775807i64 // maximum signed long long int value
#define LLONG_MIN (-9223372036854775807i64 - 1) // minimum signed long long int value
#define ULLONG_MAX 0xffffffffffffffffui64 // maximum unsigned long long int value
类似题目:9. 回文数