2012/04/01(日)C# で 桁ごとに進数が違うインクリメントする機械

はてブ数 2012/04/01 05:27 プログラミング::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));
    }
}