관리 메뉴

드럼치는 프로그래머

[C/C++] 무한대 표현 피보나치 수열 본문

★─Programing/☆─C | C++

[C/C++] 무한대 표현 피보나치 수열

드럼치는한동이 2009. 1. 12. 20:04

후배들 과제로 피보나치 수열을 내주었는데 문뜩 이런생각이 들었다.

피보나치 수열은 30개 이상만 되도 그 값은 무한대로 커지게 되버린다.

그럼 결국 unsigned int형 범위인 0 ~ 4,294,967,294 가 넘어선다면

그값은 마이너스(-) 값이 나올 것이다.

그래서 심심풀이로 시도한 것이며, 배열을 쓰지않고 두 변수의 값을 바꿔가는 코드를 짜보았다.

두 변수의 값은 함수로 인해 변경되며 포인터를 사용하였다.

------------------------------------------------------------------------------------------------------

#include <stdio.h>

unsigned long double Belong_A ( unsigned long double*, unsigned long double* );
unsigned long double Belong_B ( unsigned long double*, unsigned long double* );

int main()
{
 while ( 1 )
 {
  unsigned long double a = 0, b = 1;
  int i = 0, n = 0;
    
  printf("피보나치 수열 갯수 입력 : ");
  scanf("%d", &n);

  if ( n < 1 )         // 입력 갯수가 1보다 작다면 if문 실행
  {
   printf("1 이상 입력 하세요! \n\n");
   continue;
  }

  while ( i++ < n/2 )        // 입력 갯수의 반만큼 반복
  {
   printf("%.lf ", Belong_A ( &a, &b ) );
   printf("%.lf ", Belong_B ( &a, &b ) );   
  }

  if ( n % 2 == 1 )        // 입력 갯수가 홀수였다면 한번 더 실행
   printf("%.lf ", Belong_A ( &a, &b ) );

  printf("\n\n");
 } 
 return 0;
}

unsigned long double Belong_A ( unsigned long double* a , unsigned long double* b )
{
 return *a += *b;
}

unsigned long double Belong_B ( unsigned long double* a , unsigned long double* b )
{
 return *b += *a;
}

Comments