2012/04/01(日)C# で 桁ごとに進数が違うインクリメントする機械
C# で 桁ごとに進数が違うインクリメントする機械
たとえば、素因数分解したときに 2^0 * 3^1 * 5^4 * 7^2 とかってなったときに、全部の約数を列挙したい時用。
public class Algorithm {
public static bool Increment(int[] value, int[] limit) {
if (value.Length != limit.Length) throw new ArgumentException();
for (int i = value.Length - 1; i >= 0; i--) {
value[i]++;
if (value[i] != limit[i]) return true;
value[i] = 0;
}
return false;
}
}
public class Program {
static void Main() {
int[] array = { 0, 0, 0, 0 }, limit = { 1, 2, 5, 3 };
do {
Console.WriteLine(string.Join(", ", Array.ConvertAll<int, string>(array, i => i.ToString())));
} while (Algorithm.Increment(array, limit));
}
}