본문으로 바로가기
728x90
반응형

[25번 문제]


피보나치 수열은 아래와 같은 점화식으로 정의됩니다.

Fn = Fn-1 + Fn-2  (단, F1 = 1, F2 = 1).

이에 따라 수열을 12번째 항까지 차례대로 계산하면 다음과 같습니다.

F1 = 1
F2 = 1
F3 = 2
F4 = 3
F5 = 5
F6 = 8
F7 = 13
F8 = 21
F9 = 34
F10 = 55
F11 = 89
F12 = 144

수열의 값은 F12에서 처음으로 3자리가 됩니다.

피보나치 수열에서 값이 처음으로 1000자리가 되는 것은 몇번째 항입니까?

[ 번역링크 / 원본링크 ]


[코드]


기존에 vector와 capacity 를 사용하면서 배열범위 초과 오류가 뜨는지 영문을 몰랐는데.....

capacity로 벡터의 크기를 확인하는게 아니라  size로 확인해야했었다..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "stdafx.h"
#include <iostream>
#include <algorithm>
using namespace std;
 
int ans = 2;
vector <int> vector_sum(vector <int> a,vector <int> b)
{
    for (int i = 0; i < a.size(); i++)
    {
        if(i<b.size())
            a[i] += b[i];
        if (a[i] >= 10)
        {
            if (i == (a.size() - 1))
                a.push_back(a[i] / 10);
            else
                a[i + 1+= a[i] / 10;
            a[i] %= 10;
        }
    }
    return a;
}
int main()
{
    vector <int> a, b,temp;
    a.push_back(1);
    b.push_back(1);
 
    while(a.size() < 1000)
    {
        ans++;
        temp = a;
        a = vector_sum(a, b);
        b = temp;
    }
    cout<< endl<< ans<<endl;
    system("pause");
    return 0;
}
cs

728x90
반응형