求64位能表示的最大斐波那契数
转载请注明来源:http://blog.youkuaiyun.com/letian0805
问题说明
求64位能表示的最大斐波那契数,每10个打印一次,并打印最大以及倒数第二个。
原理
F(0)=0,F(1)=1,F(n)=F(n-1) + F(n-2)。利用64位无符号整型F(n)溢出求出F(n-1)、F(n-2)。
代码
#include
#include
#include
int main(void)
{
uint64_t pre=0;
uint64_t cur=1;
uint64_t next=0;
uint64_t cnt=1;
while(1)
{
next=cur+pre;
pre=cur;
cur=next;
cnt++;
if(cnt%10==0)
printf("F%llu=%llu\n", cnt, cur);
if (cur + pre < cur)
break;
}
printf("F%llu=%llu F%llu=%llu\n", cnt-1, pre, cnt, cur);
system("pause");
return 0;
}