整数反转
https://leetcode.cn/problems/reverse-integer/description/
class Solution {
public:
int reverse(int x) {
int MAX_LENGTH = 11; // 32位整数的最大数字的位数
int* num = (int*)calloc(sizeof(int), MAX_LENGTH); //用于保存进位每一位的数字
int current = x;
int pos = 0;
while (current != 0 && pos < MAX_LENGTH) {
num[pos] = current % 10;
current = current / 10;
pos++;
}
if (pos == MAX_LENGTH) {
return 0;
}
int new_pos = 1;
int new_num = num[0];
int highest_carry = 10;
while (new_pos < pos) {
long after = new_num;
after = after * 10 + num[new_pos];
// 若进位发生了变化,那么返回0,说明出现了溢出,
if (after % highest_carry != num[new_pos]) {
return 0;
} else {
new_num = after;
}
if (after == 0) {
highest_carry *= 10;
} else {
highest_carry = after * 10;
}
new_pos++;
}
return new_num;
}
};