HDU 1250 Hat's Fibonacci (+=)

来源:互联网 发布:js replaceall 编辑:程序博客网 时间:2024/05/19 20:01
#include <stdio.h>int  p[8000][255]={0};int i,n,j;int main()                //大数加法{ for (i=1;i<5;i++) { p[i][1]=1; } for (;i<8000;i++) { for (j=1;j<255;j++) {             p[i][j]+=p[i-1][j]+p[i-2][j]+p[i-3][j]+p[i-4][j]; p[i][j+1]+=p[i][j]/100000000;             p[i][j]%=100000000;  } } while (scanf("%d",&n)!=EOF) { j=254; while (j>0) if(p[n][--j]) break;         printf("%d",p[n][j--]); while (j>=1) {       printf("%08d",p[n][j--]);  //08不能少,我经常会犯这样的错误 } printf("\n"); } return 0;}

大数组定义在main函数中不能执行,为什么将其定义为全局变量就可以执行?

数组定义在函数中时,占用的内存来自栈空间,栈空间是在进程创建时初始化的,有固定的大小,一般为几十KB,所以太大的数组会耗光栈空间。
而全局变量占用的堆空间,堆空间中的内存是按需分配,自由增长的,可以非常大,32位的系统中可以大到4GB。 堆空间是malloc()的。 全局变量是在编译的时候编到数据段的,可以比较大。
代码二;2015 7 11  重做
#include <iostream>using namespace std;int fib[8000][301];void caulate(){    for (int i=5;i<8000;i++)    {for (int j=1;j<300;j++){fib[i][j] += fib[i-1][j]+fib[i-2][j]+fib[i-3][j]+fib[i-4][j];//注意+=而不是=fib[i][j+1] += (fib[i][j]/10000000);fib[i][j] %= 10000000;}    }}int main(){    fib[1][1]=fib[2][1]=fib[3][1]=fib[4][1]=1;    int n,i;caulate();while (cin>>n){i=299;while (!fib[n][i])   i--;cout<<fib[n][i--];for (;i>=1;i--){printf("%07d",fib[n][i]);}cout<<endl;}return 0;}


0 0
原创粉丝点击