题目:
分析:找离N最近的左右两个fib值,并且比较找出距离最小的那一个
#include <iostream>
using namespace std;
int main()
{
int N;
while(cin>>N)
{
int first=0;
int second=1;
int sum=1;
int pre=0;
while(sum<N)
{
pre=first+second;//保存退出循环时前一个fib值(小于N)
first=second;
second=sum;
sum=first+second;//退出循环时的fib值(大于等于N)
}
//来到这说明sum>=N了
int x=N-pre;
int y=sum-N;
//取N左右两边较小的那一个值
int ret = x > y ? y : x;
cout << ret << endl;
return 0;
}
}