>>270

#include <iostream>

// 階乗計算関数
template <typename T> T fact(T n)
{
  if( n <= 0 ) return 0;
  T a = 1;
  for( ; n > 0; n-- )
    a *= n;
  return a;
}

// テスト用main
// コマンドライン引数でnを指定
int main(int argc, char **argv)
{
  if( argc < 2 ) return 0;
  int n = atoi( argv[1] );
  std::cout << fact( n )          << std::endl;
  std::cout << fact( (long) n )   << std::endl;
  std::cout << fact( (double) n ) << std::endl;
  return 0;
}