- #include <iostream>
- #include <stack>
- using namespace std;
- const int A[46] = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903};
- stack<int> S;
- int B[46];
- int n;
- int main()
- {
- while (cin >> n) {
- int t = n;
- int i = 45;
- if (n == 1) {
- S.push(1);
- t = 0;
- }
- while (t > 0 && i >= 0) {
- if (A[i] < t || (A[i] == t && t != n)) {
- if (t / A[i] > 2 || t / A[i] == 2) {
- S.push(A[i]);
- S.push(A[i]);
- t -= 2 * A[i];
- }
- else {
- S.push(A[i]);
- t -= A[i];
- }
- }
- --i;
- }
- if (t != 0)
- cout << "Illegal";
- while (!S.empty()) {
- cout << S.top() << " ";
- S.pop();
- }
- cout << endl;
- }
- return 0;
- }
复制代码 |