C++斐波那契数列前100项详细数据
最让我费解的是为什么调试一直是正确的!!!
求大神指示啊!!!!
悬赏20!!!
#include<iostream>
using namespace std;
void fi(int a[],int b[],int c[])
{
int tmp,i;
for(i=24;i>=0;i--)
{
tmp=0;
tmp=a[i]+b[i];
if(tmp>9)
{
c[i]=tmp-10;
a[i-1]++;
}
else
c[i]=tmp;
}
}
int main()
{
int f[200][25];
int i,j;
for(i=0;i<=199;i++)
for(j=0;j<=24;j++)
f[i][j]=0;
f[1][24]=1;
f[2][24]=1;
for(i=3;i<=101;i++)
fi(f[i-2],f[i-1],f[i]);
for(i=1;i<=100;i++){
for(j=0;j<=24;j++)
{
if(f[i][j]!=0)
for(;j<=24;j++)
cout<<f[i][j];
}
cout<<endl;
}
return 0;
} 展开
f⑴=C(0,0)=1。
f⑵=C(1,0)=1。
f⑶=C(2,0)+C(1,1)=1+1=2。
f⑷=C(3,0)+C(2,1)=1+2=3。
f⑸=C(4,0)+C(3,1)+C(2,2)=1+3+1=5。
f⑹=C(5,0)+C(4,1)+C(3,2)=1+4+3=8。
f⑺=C(6,0)+C(5,1)+C(4,2)+C(3,3)=1+5+6+1=13。
……
f(n)=C(n-1,0)+C(n-2,1)+…+C(n-1-m,m) (m<=n-1-m)
扩展资料:
(1)有穷数列和无穷数列:
项数有限的数列为“有穷数列”(finite sequence);
项数无限的数列为“无穷数列”(infinite sequence)。
(2)对于正项数列:(数列的各项都是正数的为正项数列)
1)从第2项起,每一项都大于它的前一项的数列叫做递增数列;如:1,2,3,4,5,6,7;
2)从第2项起,每一项都小于它的前一项的数列叫做递减数列;如:8,7,6,5,4,3,2,1;
3)从第2项起,有些项大于它的前一项,有些项小于它的前一项的数列叫做摆动数列(摇摆数列);
(3)周期数列:各项呈周期性变化的数列叫做周期数列(如三角函数);
(4)常数数列:各项相等的数列叫做常数数列(如:2,2,2,2,2,2,2,2,2)。
参考资料来源:百度百科-斐波那契数列
#include<stdio.h>
#include<string.h>
void sum(char a[],char b[])
{
int i,n,k;
for(i=strlen(b)-1,k=0;i>=0;k++,i--)
{
a[k]+=b[i]-'0';
n=k;
while(a[n]>'9')
{
a[n+1]+=(a[n]-'0')/10;
a[n]=(a[n]-'0')%10+'0';
n++;
}
}
}
int main()
{
char a[101],b[101],fib[500][201]={0},ch;
int i,j,k,c,n;
strcpy(fib[1],"1");
strcpy(fib[2],"2");
fib[0][0]='1';
for(i=1;i<101;i++)
fib[0][i]='0';
for(i=3;i<500;i++)
{
for(j=0;j<201;j++)
fib[i][j]='0';
}
for(i=3;;i++)
{
sum(fib[i],fib[i-1]);
sum(fib[i],fib[i-2]);
for(j=200;fib[i][j]=='0';j--);
fib[i][j+1]='\0';
for(k=0;k<=j;k++,j--)
{
ch=fib[i][k];
fib[i][k]=fib[i][j];
fib[i][j]=ch;
}
if(strlen(fib[i])>100||(strlen(fib[i])==101&&strcmp(fib[i],fib[0])>=0))
break;
}
n=i;
for(i=0;i<100;i++)
{
printf("fib[%d]=%s\n",i,fib[i]);
}
/*while(scanf("%s%s",a,b)!=EOF&&(strcmp(a,"0")!=0||strcmp(b,"0")!=0))
{
c=0;
for(i=1;i<=n;i++)
{
if(strcmp(fib[i],a)>=0&&strlen(fib[i])==strlen(a)||strlen(fib[i])>strlen(a))
if(strcmp(b,fib[i])>=0&&strlen(b)==strlen(fib[i])||strlen(b)>strlen(fib[i]))
c++;
}
printf("%d\n",c);
}*/
}
#include<iostream>
#include<cstring>
using namespace std;
const int LEN = 150;
void fi(int a[],int b[],int c[])
{
for(int i=LEN-1; i>=1; i--)
{
c[i - 1] = (a[i] + b[i] + c[i]) / 10;
c[i] = (a[i] + b[i] + c[i]) % 10;
}
}
int main()
{
int f[200][LEN]; memset(f, 0, sizeof f);
f[1][LEN-1]=f[2][LEN-1]=1;
for(int i=3; i<=100; i++) fi(f[i-2],f[i-1],f[i]);
for(int i=1; i<=100; i++)
{
for(int j=0; j<LEN; j++)
{
if(f[i][j]!=0) for(; j<LEN; j++) cout<<f[i][j];
}
cout<<endl;
}
return 0;
}
大哥,你的代码很高级,能详解释下fi函数吗?
2015-11-11 · 知道合伙人教育行家
知道合伙人教育行家
向TA提问 私信TA
斐波那契数列的发明者,是意大利数学家列昂纳多·斐波那契(Leonardo Fibonacci),生于公元1170年,卒于1250年,籍贯是比萨。他被人称作“比萨的列昂纳多”。1202年,他撰写了《算盘全书》(Liber Abacci)一书。他是第一个研究了印度和阿拉伯数学理论的欧洲人。他的父亲被比萨的一家商业团体聘任为外交领事,派驻地点相当于今日的阿尔及利亚地区,列昂纳多因此得以在一个阿拉伯老师的指导下研究数学。他还曾在埃及、叙利亚、希腊、西西里和普罗旺斯等地研究数学。
前100项数据为:
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
165580141
267914296
433494437
701408733
1134903170
1836311903
2971215073
4807526976
7778742049
12586269025
20365011074
32951280099
53316291173
86267571272
1.39584E+11
2.25851E+11
3.65435E+11
5.91287E+11
9.56722E+11
1.54801E+12
2.50473E+12
4.05274E+12
6.55747E+12
1.06102E+13
1.71677E+13
2.77779E+13
4.49456E+13
7.27235E+13
1.17669E+14
1.90392E+14
3.08062E+14
4.98454E+14
8.06516E+14
1.30497E+15
2.11149E+15
3.41645E+15
5.52794E+15
8.94439E+15
1.44723E+16
2.34167E+16
3.78891E+16
6.13058E+16
9.91949E+16
1.60501E+17
2.59695E+17
4.20196E+17
6.79892E+17
1.10009E+18
1.77998E+18
2.88007E+18
4.66005E+18
7.54011E+18
1.22002E+19
1.97403E+19
3.19404E+19
5.16807E+19
8.36211E+19
1.35302E+20
2.18923E+20
3.54225E+20
哪里溢出了?
你调试看一下数值都是对的,但就是显示不对