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