実行時に階乗<a> ....階乗<b>を取得するにはどうすればよいですか?

maximum_prime_is_463035818

ルックアップテーブルにコンパイル時に計算された整数を入力したい:

#include <iostream>
#include <type_traits>

template <int x> using number = std::integral_constant<int,x>;    
template <int n> struct factorial : number<n * factorial<n-1>::value> {};
template <> struct factorial<0> : number<1> {};

int get_factorial(int x) {
    if (x < 1) return -1;
    if (x > 5) return -1;
    static constexpr int lookup_table[] = { 
        factorial<1>::value,
        factorial<2>::value,
        factorial<3>::value,
        factorial<4>::value,
        factorial<5>::value
    };
    return lookup_table[x-1];
}

int main() {        
    int x;
    std::cin >> x;
    std::cout << get_factorial(x) << "\n";
}

これは少数の要素には問題ありませんが、ルックアップテーブルに多数の要素が含まれている場合はどうすればよいですか?各要素を明示的に記述せずに配列にデータを入力するにはどうすればよいですか?

これfactorialは一例です。より現実的なシナリオでは、ルックアップテーブルに最大1000個の要素を格納したいと思います。

sebrockm

C ++ 14では、次のものを使用できますstd::integer_sequence

template <int... S>
constexpr std::array<int, sizeof...(S)> get_lookup_table_impl(std::integer_sequence<int, S...>)
{
    return { factorial<S>::value... };
}

template <int S>
constexpr auto get_lookup_table()
{
    return get_lookup_table_impl(std::make_integer_sequence<int, S>{});
}

ここで完全に機能する例を参照してください

秘訣はstd::make_integer_sequence<int, S>{}、のインスタンスを作成することですstd::integer_sequence<int, S...>したがって、ヘルパー関数get_lookup_table_implはそのパラメーターパックを推測することができます。次に、それをfactorial<S>::value...解凍し、の各値をS渡しますfactorial中括弧で覆われているため、これを使用してあらゆる種類のstdコンテナを初期化できます。使用しましたがstd::array、何でも使用できます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

lc3で数学(減算、乗算、階乗)を実行し、出力を16進数に変更するにはどうすればよいですか?

分類Dev

配列内の各数値の階乗値を取得するにはどうすればよいですか?

分類Dev

再帰による階乗

分類Dev

Cで10000階乗

分類Dev

0〜30の階乗をテーブルに印刷するにはどうすればよいですか

分類Dev

この階乗関数を完全に入力するにはどうすればよいですか?

分類Dev

この階乗関数を再帰的にするにはどうすればよいですか?

分類Dev

超階乗プログラムを作成するにはどうすればよいですか?

分類Dev

階乗法を小数で機能させるにはどうすればよいですか?(ガンマ)

分類Dev

再帰(階乗)を適切に呼び出すにはどうすればよいですか

分類Dev

階乗を逆に印刷しますか?

分類Dev

この大きな階乗関数を高階関数に変換するにはどうすればよいですか?

分類Dev

落下する階乗JAVA

分類Dev

マルチスレッド並列計算機(階乗合計)を取得するにはどうすればよいですか?

分類Dev

Python:Decimalを使用してnp.ndarrayに階乗を実行する

分類Dev

階乗ではなく平方数を返す階乗関数

分類Dev

階乗N /(階乗k *階乗(Nk))が整数であることのCoq証明

分類Dev

階乗ループの実行時間とサイクル数を減らすにはどうすればよいですか?および/またはコードサイズ?

分類Dev

要因/階乗でのJava

分類Dev

Rubyを使用した階乗

分類Dev

HaskellでParsecを使用して文字列を解析するときに階乗計算を保持するにはどうすればよいですか?

分類Dev

とにかく逆階乗関数に?

分類Dev

負の数に拡張する階乗計算機を作成するにはどうすればよいですか?

分類Dev

A => BからBを取得するにはどうすればよいですか

分類Dev

21の計算方法!(21階乗)迅速に?

分類Dev

K回までの階乗の階乗を見つける

分類Dev

数値の合計を階乗で割った値を表示するにはどうすればよいですか?

分類Dev

不必要なオーバーフローなしに大きな階乗の比率を計算するにはどうすればよいですか?

分類Dev

階乗反復測定分析のためにデータを準備するにはどうすればよいですか?

Related 関連記事

  1. 1

    lc3で数学(減算、乗算、階乗)を実行し、出力を16進数に変更するにはどうすればよいですか?

  2. 2

    配列内の各数値の階乗値を取得するにはどうすればよいですか?

  3. 3

    再帰による階乗

  4. 4

    Cで10000階乗

  5. 5

    0〜30の階乗をテーブルに印刷するにはどうすればよいですか

  6. 6

    この階乗関数を完全に入力するにはどうすればよいですか?

  7. 7

    この階乗関数を再帰的にするにはどうすればよいですか?

  8. 8

    超階乗プログラムを作成するにはどうすればよいですか?

  9. 9

    階乗法を小数で機能させるにはどうすればよいですか?(ガンマ)

  10. 10

    再帰(階乗)を適切に呼び出すにはどうすればよいですか

  11. 11

    階乗を逆に印刷しますか?

  12. 12

    この大きな階乗関数を高階関数に変換するにはどうすればよいですか?

  13. 13

    落下する階乗JAVA

  14. 14

    マルチスレッド並列計算機(階乗合計)を取得するにはどうすればよいですか?

  15. 15

    Python:Decimalを使用してnp.ndarrayに階乗を実行する

  16. 16

    階乗ではなく平方数を返す階乗関数

  17. 17

    階乗N /(階乗k *階乗(Nk))が整数であることのCoq証明

  18. 18

    階乗ループの実行時間とサイクル数を減らすにはどうすればよいですか?および/またはコードサイズ?

  19. 19

    要因/階乗でのJava

  20. 20

    Rubyを使用した階乗

  21. 21

    HaskellでParsecを使用して文字列を解析するときに階乗計算を保持するにはどうすればよいですか?

  22. 22

    とにかく逆階乗関数に?

  23. 23

    負の数に拡張する階乗計算機を作成するにはどうすればよいですか?

  24. 24

    A => BからBを取得するにはどうすればよいですか

  25. 25

    21の計算方法!(21階乗)迅速に?

  26. 26

    K回までの階乗の階乗を見つける

  27. 27

    数値の合計を階乗で割った値を表示するにはどうすればよいですか?

  28. 28

    不必要なオーバーフローなしに大きな階乗の比率を計算するにはどうすればよいですか?

  29. 29

    階乗反復測定分析のためにデータを準備するにはどうすればよいですか?

ホットタグ

アーカイブ