成员们,
我想要做的是右移或左移一个 Int32
的数字(不是位!!)。
如果移动这个常数:
123456789
由3
提供
我应该获得
789123456
为了避免数字丢失,因为我们正在谈论圆形移位。 经过一些测试,我想出了这个可行的方法:
static uint[] Pow10 = new uint[] { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, uint.MaxValue };
static uint RotateShift10(uint value, int shift)
{
int r = (int)Math.Floor(Math.Log10(value) + 1);
while (r < shift)
shift = shift - r;
if (shift < 0) shift = 9 + shift;
uint x = value / Pow10[shift];
uint i = 0;
while (true)
{
if (x < Pow10[i])
return x + (value % Pow10[shift]) * Pow10[i];
i += 1;
}
}
我正在寻找的方法应该是一种算术解决方案,而不是将数字转换为字符串再进行旋转。 我还假设:
- Int32值中没有0位数字,以防止任何数字的丢失。
- Int32是非负数。
- 正数旋转整数应向右移动,负数应向左移动。
shift
= 0 的情况下会抛出异常,同时尝试使用 uint.MaxValue 进行测试,它将给出一个无效的答案。 - Dzienny