C言語,数値がフィボナッチ数か確認する

スポンサーリンク

鍛錬 249

C言語,数値がフィボナッチ数か確認する

数値がフィボナッチ数か確認するプログラムです。

プログラム

以下は、数値がフィボナッチ数か確認するプログラム check_fib.c です。

今回は 1 ~ 50 までの数値について確認しています。

フィボナッチ数の場合は 1 を。フィボナッチ数ではない場合は 0 を表示します。

// include
#include <stdio.h>

// prototype
void CheckFib(int max_num);
int CalcFib(int num);

// main
int main(void)
{
	int max_num;
	
	// 調べる数値の上限を格納
	max_num = 50;
	
	// 0~上限値 のフィボナッチ数を確認
	CheckFib(max_num);
	
	return 0;
}

// ==============================================================
// @brief      上限を指定し,フィボナッチ数か確認する関数に渡す
// @param[in]  max_num  調べる数値の上限
// @return     void
// @note       無し
// ==============================================================
void CheckFib(int max_num)
{
	int i;
	int ret;
	
	for (i = 1; i <= max_num; i++) {
		ret = CalcFib(i);
		printf("%d = %d\n", i, ret);
	}
}

// ========================================
// @brief      フィボナッチ数か確認する
// @param[in]  num  調べる数値の上限
// @return     0 -> フィボナッチ数ではない
// @return     1 -> フィボナッチ数である
// @note       無し
// ========================================
int CalcFib(int num)
{
	int f1, f2;
	int tmp_int;
	
	f1 = 1;
	f2 = 1;
	
	// フィボナッチ数の場合
	if (num == 1)
		return 1;
	
	while (f1 <= num && f2 <= num) {
		tmp_int = f1;
		
		// フィボナッチ数の場合
		if (num == f1 || num == f2)
			return 1;
		
		f1 = f2;
		f2 = tmp_int + f2;
	}
	
	return 0;
}

実行結果

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra check_fib.c -o check_fib
***@ubuntu:~/***/test/c$ ./check_fib
1 = 1
2 = 1
3 = 1
4 = 0
5 = 1
6 = 0
7 = 0
8 = 1
9 = 0
10 = 0
11 = 0
12 = 0
13 = 1
14 = 0
15 = 0
16 = 0
17 = 0
18 = 0
19 = 0
20 = 0
21 = 1
22 = 0
23 = 0
24 = 0
25 = 0
26 = 0
27 = 0
28 = 0
29 = 0
30 = 0
31 = 0
32 = 0
33 = 0
34 = 1
35 = 0
36 = 0
37 = 0
38 = 0
39 = 0
40 = 0
41 = 0
42 = 0
43 = 0
44 = 0
45 = 0
46 = 0
47 = 0
48 = 0
49 = 0
50 = 0

 
上記に示した通り、フィボナッチ数を確認することができました。

スポンサーリンク

シェアする

フォローする