c语言编程入门教程_C语言编程实现斐波那契大数的运算,比如求第100000个斐波那契数
最佳答案
//山东一C语言爱好者,360认为我发的程序代码相似就复制了这句话# include <stdio.h>//山东一C语言爱好者,你把这些话去掉就是你想要的# include <stdlib.h>//山东一C语言爱好者,你把这些话去掉就是你想要的你把它去掉# define M 1000000000//每九位进一位 不能再高了,可以再低,位数越多效率越高# define size 8400 //数组长度最大值一共可以存M中0的个数*SIZE位int change=0; //全局变量不可随意更改int add(int a[][size],int d);//山东一C语言爱好者,void main()//山东一C语言爱好者,{int shu[3][size]={0,0,0},num,wei,k;//山东一C语言爱好者,do{printf("显示第几个斐波纳挈数?(1--360000)\n计算第360000个需要大约2分半\n计算第100000个11秒左右:\n");//山东一C语言爱好者,scanf("%d",&wei);}while(wei<1||wei>360000);k=num=add(shu,wei); printf("%d",shu[(2+change)%3][num--]);while(num>0) printf("%09d",shu[(2+change)%3][num--]); printf("\n共大约%d±9位",(k-1)*9); getchar();}int add(int a[][size],int b){int i, j, k;int index=1;a[0][1]=a[1][1]=1;for (i=1;i<=b;i++) /* 计算第几个*/{for (j=1;j<=index; j++)a[(2+change)%3][j]=a[(change)%3][j]+a[(1+change)%3][j];for (k=1;k<index; k++)if (a[(2+change)%3][k]>=M) {a[(2+change)%3][k+1]+=a[(2+change)%3][k]/M; /* 当前位向前进位 */a[(2+change)%3][k]%=M; /*当前位进位之后的值 */} while (a[(2+change)%3][index] >= M&& index <= size-1){a[(2+change)%3][index+1] = a[(2+change)%3][index]/M; /* 向最高位进位 */a[(2+change)%3][index]%=M; /* 进位之后的值 */index++; /* 位数index加1 */} change++;/* 位数index加1 */} return index;}
最佳答案由网友 360U2549637917 提供
其他回答
暂无其它回答!