n | 0 | 1 | 2 | 3 | 4 | |
fib数列 | 7 | 10 | 17 | 27 | 44 | … |
n | n=4 | n=8 | n=14 | n=21 | n=42 | n=55 | n=60 |
-fib | / | 0 | 1 | 2 | 3 1 | 4 1 | 4 1 |
n | 1 | 4 | 4 | 5 | 1 | 6 |
完整程序:
#include<iostream>
#include<algorithm>
#include <stdio.h>
using namespace std;
#define LEN 88
string base="T.T^__^";
int main()
{
//将斐波那契数列(Fibonacci)在2^63-1范围内的数全部计算出来
long long int f[LEN];
f[0]=7;
f[1]=10;
for(int i=2;i<LEN;i++)
f[i]=f[i-1]+f[i-2];
long long int n;
while(cin>>n){
//对于每一个n,减去小于n的最大斐波那契数
while(n>7){
int i=0;
while(i<LEN&&f[i]<n)
i++;
n-=f[i-1];
}
//n中剩下的值,就是该字符在base中的位置
cout<<base[n-1]<<endl;
}
}