C#算法之整数反转
1. 题目描述
给定一个32位有符号整数,将其进行反转,返回反转后的整数。
例如:
输入:123
输出:321
输入:-123
输出:-321
输入:120
输出:21
2. 解题思路
我们可以通过将给定整数进行取余操作,不断得到末尾数字,再将其添加到反转后的数的末尾。此外,每次取余操作后,将原数除以10可以将最后一位去掉。
对于正数,一直取余、除以10,直到除尽为止,得到反转后的数。
对于负数,首先去掉负号,进行正数处理后再加上负号。
3. 代码实现
public int Reverse(int x) {
int res = 0;
while(x != 0)
{
int tail = x % 10; // 取末尾数字
int newRes = res * 10 + tail; // 反转后的数
if ((newRes - tail) / 10 != res) // 检查是否溢出
return 0;
res = newRes; // 更新反转后的数
x /= 10; // 去掉最后一位
}
return res;
}
其中,newRes
是每次新计算出的反转后的数,为保证结果不超过32位有符号整数的范围,需要用该结果减去当前末尾数字后再除以10,然后判断是否等于之前的结果。
例如,对于输入120,经过以下操作:
1. res = 0, tail = 0,newRes = 0
2. res = 0, tail = 2,newRes = 2
3. res = 2, tail = 1,newRes = 21
这就是我们要的结果。
4. 示例演示
示例一
输入:
123
输出:
321
解释:输入的数字为123,反转后为321。
示例二
输入:
-123
输出:
-321
解释:即使输入的是负数,我们也可以简单地处理它,去掉负号后按正数处理并最后加上负号。因此,输入的数字为-123,反转后为-321。
5. 总结
整数反转算法是比较简单的,主要还是要注意越界的问题,当计算的结果超出32位有符号整数的范围时要及时检查并返回0。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#算法之整数反转 - Python技术站