求一个大数的FIBONACCI

elmnd 2008-07-04 09:13:44
要求1:简单点.
  2:不用递归.
  3:带注释.

我初学,我怕谁!!
...全文
60 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyle3 2008-07-04
  • 打赏
  • 举报
回复
我这个,不能求太大的数,大了就越界了,要用大数的处理方法了...
lyle3 2008-07-04
  • 打赏
  • 举报
回复
写了一个,不知道还能不能优化...

#include <iostream>
using namespace std;

int fibonacci(int n)
{
if(n == 0 || n == 1)
{
return 1;
}
int result = 1;
int pre = 1;
int temp = result;
for(int i = 2; i <= n; i ++)
{
temp = result;
result += pre;
pre = temp;
}

return result;
}
int main()
{
int n;
cout << "enter: " ;
cin >> n;
cout << fibonacci(n) << endl;
return 0;
}

K行天下 2008-07-04
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAX 400
void my_print(int *a) //输出时把数组倒过来就是答案
{
int i;
if (a[0]<0) printf("-");
if (a[0]==0)
{
printf("0");
return;
}
for(i=abs(a[0]);i>=1;i--)
printf("%d",a[i]);
printf("\n");
}

void format(int *a) //当两个字符相加时超过10时
{
int p;
for(p=1;p<a[0]||a[p]>=10;p++)
{
if (p>=a[0]) a[p+1]=0;
a[p+1]+=a[p]/10;
a[p]=a[p]%10;
}
if (p>=a[0]) a[0]=p;
return;
}
void add(int *a,int *b,int *c) //加法的运算
{
int len,i;
if (a[0]<b[0]) len=a[0];
else len=b[0];
for(i=1;i<=len;i++)
c[i]=a[i]+b[i];
if (len<a[0])
{
for (;i<=a[0];i++)
c[i]=a[i];
c[0]=a[0];
}
else
{
for(;i<=b[0];i++)
{
c[i]=b[i];
}
c[0]=b[0];
}
format (c);
}

int main()
{
int a[MAX],b[MAX],c[MAX],i,j;
a[1]=1;a[0]=1;b[1]=1;b[0]=1;
for(i=0;i<1000;i++) //数列的1002项
{
add(a,b,c);
for(j=0; j<MAX; j++)
{
a[j] = b[j];
b[j] = c[j];
}
}
my_print(c);
getch();
return 0;
}

neurobot 2008-07-04
  • 打赏
  • 举报
回复
http://residence.educities.edu.tw/mario123/problems/fibonacci.htm
这个网址,给了一个公式,直接求,不用递归
数值大小不知能否满足你的要求

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧