階乗nを計算します!

スレッド: Nを計算するプログラムを書きます! với n là số tự nhiên không âm nhập vào từ bàn phím

Để làm được bài này, まず、式nをリコールする必要があります! 持っています. 定義によると、我々は階乗を持っています:

  • 0! = 1
  • N! = 1.2.3…N

Vậy là ta có công thức rồi. =私たちがnで参照式を見てみます 0 それは簡単です, > nの場合 0 thì nó là tích các số từ 1 nに. Vậy chúng ta có thể dùng ループ để tính dễ dàng 🙂

/*
* Calculate n!
*/

#include <stdio.h>

int main()
{
	int i, n;
	int fact = 1;

	printf("Enter n = ");
	scanf("%d", &n);

	for(i = 1; i <= n; i++) 
	{
		fact = fact * i;
	}

	printf("%d! = %d\n", n, fact);

	return 0;
}

Khá dễ dàng. Tuy nhiên các bạn để ý một chút kẻo nhầm.

  • Tại sao chúng ta lại gán giá trị ban đầu cho biến fact (Factorial) た 1 これではありません 0 hoặc số khác? Đơn giản vì nếu gán fact = 0 thì fact luôn là 0 の 0 数である掛け 0.
  • なぜ私たちは、コードのケースを検討していないN = 0 ? 私たちのループ変数iにはから実行されるため 1 nに. もしN = 0 そしてもちろんループは、当社の実際の遺跡を一度実行しません。 1. だから、プログラムはまだ本当です

戻る少しNHEを考えます. あなたは、nは入力してみてください 20 何が起こるか見てより以上? あなたは、結果が間違っているか、その負の数を返して表示されます. 理由? あなたは人間による連続した階乗の性質のために、その結​​果は非常に速く増加しますのでご注意します. 5! = 120 しかし 6! = 720 ゴーン. したがって、私たちの事実は、データ型を作る急速に成長します (int型) 私たちは、含まれていることができません (あなたは見ることができます データ型の制限された範囲). だから我々は、データ型を変更する必要があります. 我々は我々が使用するデータの種類を推定しているの大き​​さに応じてNは、どのようなタイプであります. あなたは使用することができます 長いです または 長い長いです すべての階乗NHEに対して.

/*
* Calculate n!
*/

#include <stdio.h>

int main()
{
	int i, n;
	long long fact = 1;

	printf("Enter n = ");
	scanf("%d", &n);

	for(i = 1; i <= n; i++) 
	{
		fact = fact * i;
	}

	printf("%d! = %lld\n", n, fact); // lld for long long

	return 0;
}

このあなたは計算することができた場合 20!. そして、次の結果:

Enter n = 20
20! = 2432902008176640000

20! いくつかの非常に大きいです.

Nを計算するプログラムを書きます! 再帰によって. 非負整数nは、キーボードから入力されたと

別にループを使用してから、, 我々は階乗を計算するために自然と再帰関数を使用することができます. あなたは私たちの階乗の計算式に気づきました.

  • 0! = 1
  • N! = 1.2.3…N =約(-1).(N-2)…2.1 = N。(-1)!

手段N! = N。(-1)!. 階乗の定義では階乗を持っています, これは、再帰的に同等です – リコールその機能の主な機能. 次のように我々はプログラムを書くことができます:

/*
* Calculate n! by recursive
*/

#include <stdio.h>

long long fact(int n) 
{
	if(n == 0) return 1;
	return n * fact(n-1);
}

int main()
{
	int n;

	printf("Enter n = ");
	scanf("%d", &n);

	printf("%d! = %lld\n", n, fact(n));

	return 0;
}

あなたはについてはこちらを参照することができます 機能や再帰関数を使用して.

エクササイズ: 表示するプログラムを書きます 1!, 2!, 3!,…, 20! 同時に. 各行には、いくつかを表示します.