メンバー、
私がやろうとしているのは、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 は負でない数値です
- 正の Rotation 整数は右にシフトし、負の整数は左にシフトする必要があります。
私のアルゴリズムはすでにそれをすべて行っていますが、少し調整する方法があるかどうか、問題に対するより良い算術解決策があるかどうかを知りたいですか?