Go: package main

import (
	"bufio"
	"os"
	"strconv"
	"fmt"
)

var scanner = bufio.NewScanner(os.Stdin)

func nextInt() int {
	scanner.Scan()
	i, e := strconv.Atoi(scanner.Text())
	if e != nil {
		panic(e)
	}
	return i
}

func factorial(n int) int {
	if n == 1 {
		return 1
	}
	return n*factorial(n-1)
}
func main() {
	scanner.Split(bufio.ScanWords)
	n := nextInt()
	fmt.Println(factorial(n))
}

C++: #include <iostream>

/**
* @brief ある整数の階乗を求める
*/
class Factorial
{
public:
    /**
    * @fn int getFactorial(int target)
    * @brief パラメータの階乗を取得する
    * @param[in] target ターゲット
    * @return int 階乗
    */
    int getFactorial(int target) const;

private:
    /**
    * @fn int calc(int target)
    * @brief 階乗を計算する
    * @param[in] target ターゲット
    * @return int 階乗
    */
    int calc(int target) const;
};

/**
* @brief コントロール
*/
class Control
{
public:
    /**
    * @fn  bool executeEx() const
    * @brief １つの整数を読み込み、その整数の階乗を出力する
    * @return bool 入力範囲内ならtrueを、そうでなければfalseを返す
    */
    bool executeEx() const;

private:
    /**
    * @fn bool check(int target) const
    * @brief 入力範囲をチェックする
    * @param[in] target チェック対象
    * @return bool 入力範囲内ならtrueを、そうでなければfalseを返す
    */
    bool check(int target) const;

    /**
    * @fn void read(int& data)
    * @brief 標準入力から読み込む
    * @param[out] data 入力整数
    */
    void read(int& data) const;

    /**
    * @fn void write(int target) const
    * @brief 標準出力に書き込む
    * @param[in] target 出力対象
    */
    void write(int target) const;
};

int Factorial::getFactorial(int target) const
{
    return calc(target);
}

int Factorial::calc(int target) const
{
    if (1 >= target)
        return 1;

    return target * calc(target - 1);
}

bool Control::executeEx() const
{
    int input = 0, output = 0;

    read(input);

    if (!check(input))
        return false;

    output = Factorial().getFactorial(input);

    write(output);

    return true;;
}

bool Control::check(int target) const
{
    static const int Min = 1;
    static const int Max = 20;

    if (Min > target || Max < target)
        return false;

    return true;
}

void Control::read(int& data) const
{
    std::cin >> data;
}

void Control::write(int target) const
{
    std::cout << target << std::endl;
}

/**
* @fn int main()
* @brief エントリポイント
*/
int main()
{
    if (!Control().executeEx())
        return 1;
}

C++: #include<iostream>
using namespace std;
int fact(int n)
{
	int prod = 1;
	for (int i = 1; i <= n; i++)
	{
		prod = prod * i;
	}
	return prod;
}
int main()
{
	int x;
	cin >> x;
	cout << fact(x) << endl;
	return 0;
}

C++: #include <bits/stdc++.h>
#define r(i,n) for(int i;i<n;i++)
using namespace std;
int main(){
int a,s=1;
cin>>a;
r(i,a+1)if(i)s*=i;
cout<<s<<endl;
}

C++: #include<iostream>
using namespace std;
int main()
{
	long long a[21],b;
	a[0]=1;
	for(int i=1;i<=20;i++)a[i]=a[i-1]*i;
	cin>>b;
	cout<<a[b]<<endl;
	return 0;
}

C++: #include<iostream>
using namespace std;

int main(){
  int n,c=1;
  cin>>n;
  for(int i=n;i>0;i--)
    c*=i;
  cout<<c<<endl;
  return 0;
}

C++: #include <iostream>
#include <cstdio>
using namespace std;
long long fact(long long n){
	long long m;
	if(n==0) return 1;
	m = fact(n-1);
	return n*m;
}
int main(){
	long long n;
	cin >> n;
	cout << fact(n) << endl;
}

C++: #include <iostream>
using namespace std;

int main()
{
    int array[20] = {};
    array[0] = 1;
    int n;
    cin >> n;
    for(int i=2; i<=n; i++)
    {
        int carry = 0;
        for(int j=0; j<20; j++)
        {
            /* Multiply by the number and add carry from lower digit */
            array[j] = array[j] * i + carry;
            
            /* Calculate the carry */
            carry = array[j] / 10;
            
            /* Store the quotient to the array*/
            array[j] = array[j] % 10;
        }

    }
    /* Search the maximum digit*/
    int max_digit = 0;
    for(int i=19; i>=0; i--)
    {
        if(array[i])
        {
            max_digit = i;
            break;
        }
    }

    for(int i=max_digit; i>=0; i--)
    {
        cout << array[i];
    }

    cout << endl;
    return 0;
}

C++: #include<iostream>
using namespace std;
int main(){
  int n;
  cin >> n;
  int fac=n;
  while(--n>0)fac*=n;
  cout << fac << endl;
  return 0;
}

C++: #include <iostream>
#include <string>
#include <algorithm>
using namespace std;
 
int main(){
	cin.tie(0);
	ios::sync_with_stdio(false);
	
	int n;
	cin >> n;
	
	int ans = 1;
	while(n > 0){
		ans *= n;
		n--;
	}
	
	cout << ans << endl;
		
	return 0;
}

C++: #include <iostream>
using namespace std;
long long factorial[21];
void init(){
	factorial[1] = 1;
	for(int i = 2;i < 21; i++){
		factorial[i] = factorial[i-1] * i;
	}
}
int main(){
	init();
	int n;
	while(cin >> n){
		cout << factorial[n] << endl;
	}
	return 0;
}

C++: #include<stdio.h>

int main()
{
	int n,x,kaizyo=1;
	scanf("%d",&n);

	if(n==1)
	{
		kaizyo=1;
	}
	else
	{
		
		for(x=1;x<=n;x++)
		{
			kaizyo*=x;
		}
	}
	printf("%d\n",kaizyo);
	return 0;
}

C++: #include <iostream>
#include <string>
#include <math.h>
#include <stdio.h>
#include <algorithm>

using namespace std;

int main() {
    int a;
    cin>>a;
    int b=1;
    
    while(a!=0){
        b*=a;
        a--;
    }
    
    cout<<b<<endl;
    
    return 0;
}

C++: #include <iostream>
using namespace std;

int main()
{
	int a;
	long long int kaijou[21];

	for (int i = 0; i < 21; i++) kaijou[i] = 1;

	cin >> a;
	for (int i = 1; i <= a; i++)
	{
		kaijou[i] = kaijou[i - 1] * i;
	}
	cout << kaijou[a] << endl;
	return 0;
}

C++: #include <iostream>
using namespace std;

int main()
{
	int x,ret=1;
	cin >> x;
	for(int i=1;i<=x;i++)
		ret*=i;
	if(!x)ret=0;
	cout << ret << endl;
}

C++: using namespace std;

main(){
  int n; cin >> n;
  long long v = 1;
  for (int i = 1; i <= n; i++ ){
    v *= i;
  }
  cout << v << endl;

}

C++: #include<cstdio>
#include<iostream>
int main(){
    int ans=1,n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        ans*=i;
    printf("%d\n",ans);
    return 0;
}

C++: #include<stdio.h>
int kai(int);

int main(){
  int n;
  scanf("%d",&n);
  printf("%d\n",kai(n));
  return 0;
}

int kai(int a){
  if(a==1)return 1;
  return a*(kai(a-1));
}

C++: #include <iostream>
#include <algorithm>
using namespace std;
int main(){
int n;
cin >>n;
int b;
b=1;
long long int c;
c=1;
while(b<=n){
c=c*b;
b=b+1;}
cout <<c<<endl;}

C++:  
 #include<iostream>
 #include<stdio.h>
 #include<string>
 #include<math.h>
 #include<iomanip>
 #include<algorithm>
 #include<string.h>
 #include<cctype>
 #include<map>
 #include<set>
 #include<vector>
 #include<sstream>
 #include<stack>
 
 using namespace std;
  
 int main()
 {
   long long int n;
   long long result=1;
   cin>>n;
   while(n--)
   {
     result*=n;    
   }
   cout<<result<<endl;
   //while(1);      
   return 0;    
 }

C++: #include <stdio.h>
int main(){

		int fact=1,i,n;
		scanf("%d",&n);
		for(i=1;i<=n;i++)
			fact=fact*i;
		printf("%d",fact);

		return 0;
}

C++: #include <iostream>
using namespace std;

int main() {
	int n; cin >> n;
	if (n<1) n=1;
	else if (n>20) n=20;
	long long ans=1;
	for (int i=n; i>0; i--) ans *= i;
	cout << ans << endl;
	return 0;
}

C++: #include<bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(n);i++)
#define loop(i,x,n) for(int i=(x);i<(n);i++)
#define all(x) (x).begin(),(x).end()
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define ub upper_bound
#define lb lower_bound
#define int long long
using namespace std;
const int MOD=1000000007;
const int INF=1000000009;

int memo[30];

int fac(int m){
  if(m==1)return 1;
  return m*fac(m-1);
}

signed main(){
  int n;
  cin>>n;
  cout<<fac(n)<<endl;
  return 0;
}

C++: #include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#include <string>
#include <map>
#include <functional>
#include <cmath>
#include <cstdio>
using namespace std;

int main(){
  int n;
  cin >> n;
  long long int ans = 1;
  for(int i = 0; i < n; i++){
    ans *= (n - i);
  }
  cout << ans << endl;
}