I I U P C 2 0 06 | |
Problem F: Fi-binary Number | |
Input: standard input Output: standard output | |
| |
A Fi-binary number is a number that contains only 0 and 1. It does not contain any leading 0. And also it does not contain 2 consecutive 1. The first few such number are 1, 10, 100, 101, 1000, 1001, 1010, 10000, 10001, 10010, 10100, 10101 and so on. You are given n. You have to calculate the n’th Fi-Binary number.
| |
Input | |
The first line of the input contains one integer T the number of test cases. Each test case contains one integer n.
| |
Output | |
For each test case output one line containing the n’th Fi-Binary number.
| |
Constraints | |
- 1 ≤ N ≤ 109
| |
Sample Input | Output for Sample Input |
4 | 10010 |
#include <cstdio>
using namespace std;
const int N = 50;
long long f[N];
void solve(long long x);
void init();
int main()
{
#ifndef ONLINE_JUDGE
freopen("d:\\OJ\\uva_in.txt", "r", stdin);
#endif
init();
int t;
scanf("%d", &t);
while (t--) {
long long n;
scanf("%lld", &n);
solve(n);
}
return 0;
}
void init()
{
f[0] = f[1] = 1;
for (int i = 2; i < N; i++) {
f[i] = f[i - 2] + f[i - 1];
}
}
void solve(long long x)
{
x--;
int n;
for (n = 0; f[n] <= x; n++) x -= f[n];
printf("1");
while (n > 1) {
if (x < f[n - 1]) {
printf("0");
n--;
} else {
printf("01");
x -= f[n - 1];
n -= 2;
}
}
printf("%s\n", n ? "0" : "");
}