輸入的 N <= 10000吆录,而 F[21] = 10946, 所以只需求出 Fibonacci 前 20 項(xiàng)足以
樣例輸入輸入
#include <cstdio>
int FBNQ[21] = {0};
void get_FBNQ()
{
FBNQ[1] = 1;
FBNQ[2] = 1;
for(int i = 3; i < 21; i++)
{
FBNQ[i] = FBNQ[i - 1] + FBNQ[i - 2];
}
}
bool is_FBNQ(int n)
{
for(int i = 1; i < 21; i++)
{
if(n == FBNQ[i])
{
return true;
}
}
return false;
}
int main()
{
get_FBNQ();
int n;
while(scanf("%d", &n), n != 0)
{
if(is_FBNQ(n))//特判
{
printf("%d\n", n);
continue;
}
while(!is_FBNQ(n))//當(dāng)n不是斐波那契數(shù)
{
for(int i = 20; i >= 0; i--)//找到小于n的最大斐波那契數(shù)
{
if(FBNQ[i] <= n)
{
printf("%d+", FBNQ[i]);
n = n - FBNQ[i];
break;
}
}
}//此時(shí) n 必然是 Fibonacci 數(shù)
printf("%d\n", n);
}
return 0;
}