Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
[Solution]
需要考虑:如果给出数据的逆置溢出,如何处理?
1 int reverse(int x) 2 { 3 long long int original = x; 4 int flag = x > 0 ? 1 : -1; 5 original *= flag; 6 long long int rx = 0; 7 8 while (original != 0) 9 { 10 rx = rx * 10 + original % 10; 11 original /= 10; 12 } 13 rx = rx * flag; 14 15 if ((flag > 0 && rx > INT_MAX) || (flag < 0 && rx < INT_MIN)) 16 return 0; 17 return (int)rx; 18 }
在C语言中,除法采用向零取整,即舍去小数部分,因此又称截断取整。
此时 (-a)/b == -(a/b)始终成立。
等式: a ÷ b = c … r
r = a - b * c 始终成立,可知对于负数取模运算,r的符号和a一致。
1 int reverse(int x) 2 { 3 long long int rx = 0; 4 while (x != 0) 5 { 6 rx = rx * 10 + x % 10; 7 x /= 10; 8 } 9 if (rx > INT_MAX || rx < INT_MIN) 10 return 0; 11 return (int)rx; 12 }