LeetCode – ReverseInteger
Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.
Assume the environment does not allow you to store 64-bit integers (signed or unsigned).
Example 1:
Input: x = 123 Output: 321
Example 2:
Input: x = -123 Output: -321
Example 3:
Input: x = 120
Output: 21
看起來很單純的題目
我第一階段的暴力解 是取餘數* 10的(長度-1)次方,每次長度都--;
結果在 大數處理的時候溢位問題很多
寫法最終如下
namespace TestProject1.Reverse_Integer;
public class ReverseInteger
{
public int Reverse(int x)
{
var s = 0;
while (x != 0)
{
var r = x % 10;
var temp = s * 10 + r;
if ((temp - r) / 10 != s) //避免溢位問題
return 0;
s = temp;
x /= 10;
}
return s;
}
}
using FluentAssertions;
using NUnit.Framework;
using TestProject1.Reverse_Integer;
public class ReverseIntegerTest
{
[SetUp]
public void Setup()
{
}
[Test]
public void Test001()
{
ReverseInteger ts = new ReverseInteger();
var result = ts.Reverse(123);
result.Should().Be(321);
}
[Test]
public void Test002()
{
ReverseInteger ts = new ReverseInteger();
var result = ts.Reverse(-123);
result.Should().Be(-321);
}
[Test]
public void Test003()
{
ReverseInteger ts = new ReverseInteger();
var result = ts.Reverse(120);
result.Should().Be(21);
}
[Test]
public void Test004()
{
ReverseInteger ts = new ReverseInteger();
var result = ts.Reverse(1534236469);
result.Should().Be(0);
}
[Test]
public void Test005()
{
ReverseInteger ts = new ReverseInteger();
var result = ts.Reverse(32768);
result.Should().Be(86723);
}
}