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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <iostream>
#include <math.h>


using namespace std;
void fibonacci(int n);
int szukaj(int f);
int cyfra( char znak ) {return int(znak-48);} 
char znak( int liczba ) {return char(liczba+48);} 
string add(string &A, string &B );


int main(int argc, char** argv) {
	ios_base::sync_with_stdio(false); 		
	int a,b;
	cin >>a;
	b = szukaj(a);
	if (b>=0)
		fibonacci(b);
	else 
		cout << "NIE";

}


int szukaj(int f)
{
	int d=pow(10,(int)log10(f)+1);

	int a;
	int x=0,y=1,z=0;
	if (f<=0)
		return f;
	else
	for(a = 2; a<476; a++)
	{
        z = x+y;
        x = y;
        y = z%d;
		if (y==f)
			return a;
    }
			return -1;
}


void fibonacci(int n)
{
	 
	string _0 = "0";
	string _1 = "1", N; 	 
	unsigned long long int i;   
	if( n< 2 )
	{
		if( n == 0 ) N = _0;
		else N = _1;
	}
	else
	{
		for( i = 2; i <= n; i++ )
		{
			N = add( _0, _1 );
			_0 = _1;
			_1 = N;
		}
	}
	 
	cout <<N;
	 
}

 
string add(string &A, string &B )
{    
	while( A.length() != B.length() )     
	{
		if( A.length() > B.length() ) 
			{
				B = "0" + B;
			}
		else A = "0" + A;
	}
	 
	string wynik = "";
	int p = 0;
	 
	for(int i = A.length()-1; i >= 0; i-- ) 
	{
		int pom = cyfra(A[i]) + cyfra(B[i]) + p; 
		wynik = znak( pom % 10 ) + wynik; 
		p = int(pom/10);
	}
	 
	if( p != 0 ) wynik = znak( p ) + wynik;
	 
	return wynik;
}