C语言算法-解答整数反转算法问题的C语言实现
题目
给定一个32位有符号整数,将其进行反转。
引言
整数反转是一个简单但有趣的问题。给定一个整数,我们需要将其各个位上的数字反转,并保持符号不变。例如,对于整数 123,反转后的结果为 321。解决这个问题需要使用一种巧妙的方法。
算法思路
我们将使用一种巧妙的方法来解决整数反转问题。算法的思想是通过不断取整和取余来反转整数。
算法的步骤如下:
- 定义一个变量
result
,用于保存反转后的结果。 循环执行以下步骤,直到给定整数为0:
- 取给定整数的个位数字(通过对10取余)。
- 将个位数字添加到
result
中。 - 给定整数除以10,向下取整。
- 检查
result
是否溢出。如果溢出,则返回0。 - 返回
result
。
代码实现
下面是使用C语言实现的代码:
#include <stdio.h>
#include <limits.h>
int reverse(int x) {
int result = 0;
while (x != 0) {
int digit = x % 10;
x /= 10;
// 检查溢出
if (result > INT_MAX / 10 || (result == INT_MAX / 10 && digit > 7))
return 0;
if (result < INT_MIN / 10 || (result == INT_MIN / 10 && digit < -8))
return 0;
result = result * 10 + digit;
}
return result;
}
int main() {
int num = 123;
int reversed = reverse(num);
printf("Input: %d\n", num);
printf("Reversed: %d\n", reversed);
return 0;
}
算法分析
该算法的时间复杂度为 O(log(x)),其中 x 是给定整数的位数。在循环中,我们每次都将给定整数除以10,因此循环的次数取决于给定整数的位数。
空间复杂度为 O(1)。
示例和测试
示例输入1:
Input: 123
示例输出1:
Reversed: 321
示例输入2:
Input: -123
示例输出2:
Reversed: -321
示例输入3:
Input: 120
示例输出3:
Reversed: 21
示例输入4:
Input: 1534236469
示例输出4:
Reversed: 0
总结
本文使用C语言实现了解答整数反转算法问题的代码。通过不断取整和取余操作,我们能够将给定整数进行反转。需要注意溢出的情况,并及时进行检查。该算法的时间复杂度为 O(log(x)),空间复杂度为 O(1)。