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