classBigInt { public: int len_; int arr_[2500]; int &operator[](int x) { return arr_[x]; } BigInt(string s = "") { memset(arr_, 0, sizeof(arr_)); len_ = s.length(); for (int i = 1; i <= len_; ++i) arr_[i] = s[len_ - i] - '0'; } voidflatten(int len) { len_ = len; for (int i = 1; i <= len_; ++i) { if (arr_[i] >= 10) { arr_[i + 1] += arr_[i] / 10; arr_[i] %= 10; } } while (!arr_[len_]) --len_; } voidprint() { for (int i = max(1, len_); i >= 1; --i) cout << arr_[i]; } };
BigInt operator+(BigInt a, BigInt b) { BigInt c; int len = max(a.len_, b.len_); for (int i = 1; i <= len; ++i) c[i] += a[i] + b[i]; c.flatten(len + 1); return c; }
intmain() { int m, n; cin >> m >> n; BigInt a("1"), b("1"); for (int i = 3; i <= n - m + 1; ++i) { BigInt c; c = a + b; a = b; b = c; } b.print(); }