컴공 일기275
게시글 주소: https://orbi.kr/00072352394

교수가 꽤 재미있는 과제를 냈습니다. 피버나치 수열의 1000번째 값을 구하고 싶은데, 보다시피 자리수만 따져 보더라도 200자리가 훌쩍 넘어갑니다. 파이썬은 고민할 필요가 없겠습니다만 C언어에서는 200자리가 넘어가는 정수형을 담을 수 있는 기본 자료형이 존재하지 않습니다. 기껏해야 long long일텐데, 이 마저도 200자리는 커버할 수 없지요.
물론, 라이브러리를 이용하면 이 정도 문제야 간단히 해결할 수 있습니다만
바보가 아닌 교수는 라이브러리를 사용하지 않고, 적합한 코딩을 통해 200자리를 담아낼 수 있는 코드를 작성하라고 하는 겁니다.
방법은 간단합니다. 그냥 합치는 거죠. 기본 타입으로는 200비트를 커버할 수 없으므로, char형 200사이즈 되는 배열 두 개를 만들고,
피버나치 점화식을 돌리면서 이 배열들을 업데이트해주면 됩니다. 기본 정수형이 200비트에 모자라서 생긴 일이니, 충분히 커버할 수 있는 array 자료구조를 이용하면 되는 겁니다.
#include <stdio.h>
#include <string.h>
#define N 209 //The 1000th Fibonacci number has 209 decimal digits.
void print_digits(char d[N])
{
int i = 0;
while(d[i] == 0) i++;
while(i<N)
{
printf("%d", d[i++]);
}
}
void add_digits(char aa[N], char bb[N])
{
int i = 0;
int carry = 0;
int j,s;
while(aa[i] == 0) i++;
for(j=N-1; j>=i-1; j--)
{
if( ( s = carry + aa[j] + bb[j]) > 9)
{
carry = 1;
bb[j] = s-10;
}
else
{
bb[j] = s;
carry = 0;
}
}
}
int main()
{
char aa[N] = {0};
char bb[N] = {0};
char tmp[N] = {0};
bb[N-1] = 1;
for(int i=2; i<=1000; i++)
{
memcpy(tmp, bb, sizeof(bb)); //save bb
add_digits(aa, bb); //update bb
memcpy(aa, tmp, sizeof(tmp)); //update aa
}
print_digits(bb);
}
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
대화와 타협의 시대를 열어서 통합과 통일을 이루고 영원한 번영의 나라로 가자
-
카투사 0
붙여줘
-
나이로 사수생은 두명 봄
-
의대 갈 사람이면 사실 과탐해도 상관없는거 아니가? 목표를 정하고 탐구를 결정하자
-
살이너무쪄서돼지됨
-
일반과라 휴학도 안해서 학교 다니는데 친구가없어서 오르비에 왔어
-
ㅇㅇ…
-
제발씨발련아
-
왼팔 개같이 아프네 11
아니 컵 하나 들다가 전완근 쪽이 뒤지게 아픔 뼈에서 통증 느껴진 건 ㄹㅈㄷ네
-
10명한테 고백했는데 다 까였음;
-
과팅 설레요 7
1학기에는 과팅 5번만 해볼게요
-
잘 통해야지 2
예뻐도 말이 안 통하면 ㅈㄴ 답답하겠지 또 편했으면 좋겠고 관심사 같으면 좋겠고...
-
웅야
-
근데 7
드레이븐?이 문제에요 이 와중에 진짜 예 타워? 안쪽 그래도 잭키러브?가 문제에요...
-
무슨 생각으로 쓴 거냐
-
술 다 깼다 2
일찍 자고 오후에 시강(Rigor mortis 아님 ㅎㅎ) 들으러 가야지
-
이거 약간 월간패스 같은 거 과금유도 너무 해서 질러야하긴 해..
-
누구 추천하시나요 2정도고 지금 김범준 스블 듣고잇어요 작년 서바시즌에 엄소연t...
-
후회 안하려나
-
ㅈㄴ 어렵다고 생각함 그냥 수1 개싫음
-
인스타 본계 팔로워 1명인데 그마저도 내 계정임..
-
글 쓸 게 없네 1
으윽
-
이젠 연고 낮 서성한하고 겹치는 거??
-
젠지가 제일 예쁘다더라 아.. 내눈엔 다 예뻤는데 한화는 좀 거시기 하다더라..
-
한문이싫어요 0
-
갑자기 궁금한 게 부정적분으로 함수를 정의할 수 있나? 2
그럼 함수 자체가 부정이란 건데, 걍 적분상수 +c 가 붙고 조건 한 개더 던져주면...
-
대학만 높이고 아무과나 ㄱㄴ 언 확 사탐 94 92 2 70 69 면 어디까지 가눙함?
-
킨카쿠지 0
호주머니를 뒤지니, 단도와 수건에 싸인 칼모틴 병이 나왔다. 그것을 계곡 사이를...
-
단치 960.3 0
단치 960.3정도 였으면 붙었나요?
-
는 하면 안 되겠지
-
그 특징이 드러나는게 재밌음
-
투과목중 2초 1
물2 생2 뭐가 낫나요?
-
밑반찬 할거 추천좀 해주세용
-
꽤 생겼어
-
우리 학교 선배가 보인다 ㅈㄴ 신기하네
-
막상 보면 짧은 거 같기도 하고
-
뻘글1 2
가동.
-
여기는 5
내가 점령한다
-
지듣노 0
요즘 리제로 3기가 참 재밌드라구
-
중대발표 3
-
으흐흐 난 새우탈곡기야
-
진짜 꼭,노 쇼츠 나옴?
-
비타500 조공까지 바쳤는데 안주시네..
-
색 2
연 필 연 색 연 필 연 색
-
닉언 ㄴㄴ 10
ㄴㄴ
-
와 사람 진짜 없네 20
역시 3월은 개강의 달
-
나온지 3년된 문제가 아직도 화제
와 님 오랜만
ㄷㄷ
빅 인티저 문제 맞나 이게
이야 이거 1학년 자료구조 과제였는데