#include <iostream> #include <algorithm> #include <cstring> using namespace std; const int BASE = 10; /*baza liczb*/ const short DIGS = 1; /*liczba cyfr w kazdej z liczb o danej podstawie BASE*/ const int LEN = 101; /*liczba cyfr o podst. BASE itp. */ struct liczba { int val [LEN]; int len; //faktyczna dlugosc liczby liczba() {} liczba (int x) { len = 0; int templ = x; if(templ == 0) len = 1; else while (templ > 0) { len++; templ /= BASE; } for(int i = 0;i < len;i++) { val [i] = x % BASE; x /= BASE; } } liczba operator+ (liczba par); static void wypisz (liczba x); }; liczba liczba::operator+ (liczba par) { liczba wynik; wynik.len = min(this->len, par.len); int przen = 0; for(int i = 0; i < wynik.len; i++) { wynik.val[i] = (this->val[i] + par.val[i] + przen) % BASE; przen = (this->val[i] + par.val[i] + przen) / BASE; } while (wynik.len < par.len) { wynik.val[wynik.len] = (par.val[wynik.len] + przen) % BASE; przen = (par.val[wynik.len] + przen) / BASE; wynik.len++; } while (wynik.len < this->len) { wynik.val[wynik.len] = (this->val[wynik.len] + przen) % BASE; przen = (this->val[wynik.len] + przen) / BASE; wynik.len++; } if(przen>0) { wynik.val [wynik.len] = przen; wynik.len++; } return wynik; } void liczba::wypisz (liczba x) { cout << x.val [x.len - 1]; for(int i=x.len - 2;i>=0; i--) cout << x.val [i]; } int main(int argc, char **argv) { ios_base::sync_with_stdio(false); char *c = (char *)malloc(19); bool found = false; cin.getline(c, 18, '\n'); liczba prev(0), next(1), temp(1); while(next.len < 101) { short clen = strlen(c); for(int i = clen - 1; i >= 0; i--) { if(prev.val[clen - i - 1] != int(c[i] - '0')) break; if(i == 0) found = true; } if(found) { liczba::wypisz(prev); cout << endl; break; } temp = next; next = prev + next; prev = temp; } if(!found) cout << "NIE" << endl; /*liczba prev(0), next(1), temp(1); for(int i = 0; i < 40; i++) { liczba::wypisz(prev); cout << endl; temp = next; next = prev + next; prev = temp; } liczba::wypisz(prev); cout << endl; liczba::wypisz(next); cout << endl;*/ //system("pause"); 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 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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | #include <iostream> #include <algorithm> #include <cstring> using namespace std; const int BASE = 10; /*baza liczb*/ const short DIGS = 1; /*liczba cyfr w kazdej z liczb o danej podstawie BASE*/ const int LEN = 101; /*liczba cyfr o podst. BASE itp. */ struct liczba { int val [LEN]; int len; //faktyczna dlugosc liczby liczba() {} liczba (int x) { len = 0; int templ = x; if(templ == 0) len = 1; else while (templ > 0) { len++; templ /= BASE; } for(int i = 0;i < len;i++) { val [i] = x % BASE; x /= BASE; } } liczba operator+ (liczba par); static void wypisz (liczba x); }; liczba liczba::operator+ (liczba par) { liczba wynik; wynik.len = min(this->len, par.len); int przen = 0; for(int i = 0; i < wynik.len; i++) { wynik.val[i] = (this->val[i] + par.val[i] + przen) % BASE; przen = (this->val[i] + par.val[i] + przen) / BASE; } while (wynik.len < par.len) { wynik.val[wynik.len] = (par.val[wynik.len] + przen) % BASE; przen = (par.val[wynik.len] + przen) / BASE; wynik.len++; } while (wynik.len < this->len) { wynik.val[wynik.len] = (this->val[wynik.len] + przen) % BASE; przen = (this->val[wynik.len] + przen) / BASE; wynik.len++; } if(przen>0) { wynik.val [wynik.len] = przen; wynik.len++; } return wynik; } void liczba::wypisz (liczba x) { cout << x.val [x.len - 1]; for(int i=x.len - 2;i>=0; i--) cout << x.val [i]; } int main(int argc, char **argv) { ios_base::sync_with_stdio(false); char *c = (char *)malloc(19); bool found = false; cin.getline(c, 18, '\n'); liczba prev(0), next(1), temp(1); while(next.len < 101) { short clen = strlen(c); for(int i = clen - 1; i >= 0; i--) { if(prev.val[clen - i - 1] != int(c[i] - '0')) break; if(i == 0) found = true; } if(found) { liczba::wypisz(prev); cout << endl; break; } temp = next; next = prev + next; prev = temp; } if(!found) cout << "NIE" << endl; /*liczba prev(0), next(1), temp(1); for(int i = 0; i < 40; i++) { liczba::wypisz(prev); cout << endl; temp = next; next = prev + next; prev = temp; } liczba::wypisz(prev); cout << endl; liczba::wypisz(next); cout << endl;*/ //system("pause"); return 0; } |