现在碰到个问题,老师让我们编一个不大于某数的Fibonacci数,该数的大小上限为10的1000次方,我只知道用字符数组存,但如何实现啊
[此贴子已经被作者于2007-4-18 20:16:46编辑过]
和你意思不是完全一样应该改改数组大小就够了.
#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;
}