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