#include <iostream> #include <math.h> using namespace std; long long wejscie,ile_cyfr; long long daj_ile_cyfr_ma_liczba(long long liczba_wejsciowa) { long long wynik=0; long long i; for(i=0;liczba_wejsciowa>0;liczba_wejsciowa=liczba_wejsciowa/10,i++) { wynik++; } return wynik; } long long daj_n_ostatnich_cyfr_liczby(long long liczba_wejsciowa,short ile_cyfr) { long long wynik=0; long long i,cyfra; long long mnoznik[]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000,10000000000,100000000000,1000000000000,10000000000000,100000000000000,10000000000000000,100000000000000000,1000000000000000000}; for(i=0;i<ile_cyfr && liczba_wejsciowa>0;liczba_wejsciowa=liczba_wejsciowa/10,i++) { cyfra=liczba_wejsciowa%10; wynik=wynik+(cyfra*mnoznik[i]); } return wynik; } void fibonacci(int ile_wyrazow,short ile_cyfr,long long szukane_cyfry) { long long a = 0, b = 1,poprzedni; long fragment; short a1,b1,cyfra; if(ile_cyfr==1 && szukane_cyfry==0) { cout<<0<<std::endl; return; } for(int i=0;i<ile_wyrazow;i++) { poprzedni=b; b += a; //pod zmienną b przypisujemy wyraz następny czyli a+b b=daj_n_ostatnich_cyfr_liczby(b,ile_cyfr); if(szukane_cyfry==b) { cout<<i+2<<std::endl; return; } a = poprzedni; //pod zmienną a przypisujemy wartość zmiennej b if(a==0 && b==1 && i>5) { cout<<"NIE"<<std::endl; return; } } cout<<"NIE"<<std::endl; return; } int main() { cin >> wejscie; ile_cyfr=daj_ile_cyfr_ma_liczba(wejscie); fibonacci(1000000,ile_cyfr,wejscie); return 0; }
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 | #include <iostream> #include <math.h> using namespace std; long long wejscie,ile_cyfr; long long daj_ile_cyfr_ma_liczba(long long liczba_wejsciowa) { long long wynik=0; long long i; for(i=0;liczba_wejsciowa>0;liczba_wejsciowa=liczba_wejsciowa/10,i++) { wynik++; } return wynik; } long long daj_n_ostatnich_cyfr_liczby(long long liczba_wejsciowa,short ile_cyfr) { long long wynik=0; long long i,cyfra; long long mnoznik[]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000,10000000000,100000000000,1000000000000,10000000000000,100000000000000,10000000000000000,100000000000000000,1000000000000000000}; for(i=0;i<ile_cyfr && liczba_wejsciowa>0;liczba_wejsciowa=liczba_wejsciowa/10,i++) { cyfra=liczba_wejsciowa%10; wynik=wynik+(cyfra*mnoznik[i]); } return wynik; } void fibonacci(int ile_wyrazow,short ile_cyfr,long long szukane_cyfry) { long long a = 0, b = 1,poprzedni; long fragment; short a1,b1,cyfra; if(ile_cyfr==1 && szukane_cyfry==0) { cout<<0<<std::endl; return; } for(int i=0;i<ile_wyrazow;i++) { poprzedni=b; b += a; //pod zmienną b przypisujemy wyraz następny czyli a+b b=daj_n_ostatnich_cyfr_liczby(b,ile_cyfr); if(szukane_cyfry==b) { cout<<i+2<<std::endl; return; } a = poprzedni; //pod zmienną a przypisujemy wartość zmiennej b if(a==0 && b==1 && i>5) { cout<<"NIE"<<std::endl; return; } } cout<<"NIE"<<std::endl; return; } int main() { cin >> wejscie; ile_cyfr=daj_ile_cyfr_ma_liczba(wejscie); fibonacci(1000000,ile_cyfr,wejscie); return 0; } |