hdu 1250 高精度加法,四个数字的裴波拉契

来源:互联网 发布:酷狗铃声mac 编辑:程序博客网 时间:2024/05/18 02:44
#include<iostream>#include<cstring>using namespace std;int main(){int a[3000],b[3000],c[3000],d[3000],e[3000],n,i,j,max,temp;while(scanf("%d",&n)!=EOF){if(n==1||n==2||n==3||n==4)cout<<"1"<<endl;else{     memset(a,0,sizeof(a));     memset(b,0,sizeof(b));     memset(c,0,sizeof(c));     memset(d,0,sizeof(d));     memset(e,0,sizeof(e)); a[0]=1;b[0]=1;c[0]=1;d[0]=1; max=1;         for(i=5;i<=n;i++) { temp=0; for(j=0;j<max;j++) { e[j]=a[j]+b[j]+c[j]+d[j]+temp; if(e[j]>=10) { temp=e[j]/10; e[j]=e[j]%10; } else temp=0; a[j]=b[j];b[j]=c[j];c[j]=d[j];d[j]=e[j]; } if(temp>0) { e[max]=temp;             //容易写成if(e[max]>0) d[max]=temp; max++; } } for(i=max-1;i>=0;i--) cout<<e[i]; cout<<endl;}}}







这道题我看到别人开很大数组,结果内存爆掉了,后来我想了一下,其实五个数组就够用了,其实我最初还想过递归,感觉太麻烦,直接写了,写加法的时候在注释的那个地方调了半天,后来才发现问题,以前写习惯了。最后,那个内存3000就够了。

0 0
原创粉丝点击