c语言编程入门教程_C语言编程实现斐波那契大数的运算,比如求第100000个斐波那契数

原问题:C语言编程实现斐波那契大数的运算,比如求第100000个斐波那契数
分类:编程开发 > 最后更新时间:【2016-12-13 15:23:14】

最佳答案

//山东一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  提供
公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
1

分享到:

其他回答

暂无其它回答!

    推荐