标题:[求助]Fibonacci数列问题高精度计算如何实现啊
只看楼主
victor2006
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-4-16
 问题点数:0 回复次数:1 
[求助]Fibonacci数列问题高精度计算如何实现啊

现在碰到个问题,老师让我们编一个不大于某数的Fibonacci数,该数的大小上限为10的1000次方,我只知道用字符数组存,但如何实现啊

[此贴子已经被作者于2007-4-18 20:16:46编辑过]

搜索更多相关主题的帖子: Fibonacci 高精度 上限 字符 
2007-04-16 18:38
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
得分:0 

和你意思不是完全一样应该改改数组大小就够了.
#include<stdio.h>/*输出在a到b范围内的fib数列的个数*/
#include<string.h>
int compare(int a[],int b[])
{
int i,j;
for(i=109;a[i]!=0;i--);
for(j=109;b[j]!=0;j--);
if(i<j)
return 1;
else if(i>j)
return 0;
else
{
while(i>=0)
{
if(a[i]<b[i])
return 1;
else if(a[i]>b[i])
return 0;
else
i--;
}
if(i==-1)
return 0;
}
}
int compare1(int a[],int b[])
{
int i,j;
for(i=109;a[i]!=0;i--);
for(j=109;b[j]!=0;j--);
if(i<j)
return 1;
else if(i>j)
return 0;
else
{
while(i>=0)
{
if(a[i]<b[i])
return 1;
else if(a[i]>b[i])
return 0;
else
i--;
}
if(i==-1)
return 1;
}
}
void jisuan(int a[],int b[])
{
int temp[110]={0};
int i;
for(i=0;i<109;i++)
{
temp[i]+=a[i]+b[i];
temp[i+1]+=temp[i]/10;
temp[i]%=10;
}
for(i=0;i<109;i++)
{
a[i]=b[i];
b[i]=temp[i];
}
}

int main()
{
char a[110],b[110];
int c[110],d[110],f1[110],f2[110];
int i,j,count;
while(scanf("%s %s",a,b))
{
if(a[0]=='0'&&b[0]=='0')
break;
else
{
for(i=0;i<109;i++)
c[i]=d[i]=f1[i]=f2[i]=0;
f1[0]=1;
f2[0]=2;
i=strlen(a)-1;
for(j=0;i>=0;i--,j++)
c[j]=a[i]-'0';
i=strlen(b)-1;
for(j=0;i>=0;i--,j++)
d[j]=b[i]-'0';
while(compare(f1,c))
{
jisuan(f1,f2);
}
count=1;
while(compare1(f1,d))
{
jisuan(f1,f2);
/*在这个地方输出数组f1就是在该范围的的元素*/
count++;
}
printf("%d\n",--count);
}
}
return 0;
}


2007-04-16 20:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-132374-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.696986 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved