#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;
}
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; } |
English