题目为给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
开始思路为,将Int类型转换成字符串,然后反转,添加符号位,下方为反转字符串代码
public static string ReverseStr(string str)
{
try
{
StringBuilder sb = new StringBuilder();
for (int i = str.Length-1; i >= 0; i--)
{
sb.Append(str[i]);
}
return sb.ToString();
}
catch (Exception)
{
throw;
}
}
实现方法如下,先判断正负,添加符号位,反转,返回
public static Int32 ReverseInt32(Int32 x)
{
try
{
int flag = 0;//
if (x == 0)
{
return 0;
}
else if (x > 0)
{
flag = 1;
}
else
{
flag = 2;
x=x * -1;
}
string reverseStr = ReverseStr(x.ToString());
bool res = false;
res = Int32.TryParse(reverseStr, out Int32 resInt);
if (res)
{
if (flag == 2)
{
return resInt * -1;
}
return resInt;
}
return 0;
}
catch (Exception ex)
{
throw;
}
}
看了力扣题解,对比Java代码,发现可以进行取整取余进行叠加,C#代码如下
public static Int32 ReverseInt(Int32 x)
{
try
{
//结果数值
int res=0;
while (x != 0)
{
int temp = x % 10;
x = x / 10;
if (res>int.MaxValue/10)
{
return 0;
}
else if (res < int.MinValue / 10)
{
return 0;
}
res = res * 10 + temp;
}
return res;
}
catch (Exception)
{
throw;
}
}