Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
不用递推,只是大数问题#include<stdio.h> #include<string.h> int array[1001]; int res[1001]; int ini() { int z,flag=0; for(z=1;z<=1000;z++) { res[z]+=flag; flag=res[z]/10; res[z]%=10; } return 0; } int p(int a,int b) { int r[1001],i,j,z,flag,rnum=1; memset(r,0,sizeof(r)); r[1]=1; for(i=1;i<=b;i++) { for(j=1;j<=rnum;j++) { r[j]*=a; } flag=0; for(z=1;z<=rnum;z++) { r[z]+=flag; flag=r[z]/10; r[z]%=10; } while(flag!=0) { r[++rnum]=flag%10; flag/=10; } } for(i=1;i<=rnum;i++) { res[i]+=r[i]; } return ini(); } int add(int num) { res[1]+=num; return ini(); } int dfs(int n,int* flag) { int flag1[1001]; if(n==1) if(flag[n]!=array[n]) return add(1); else return add(0); if(array[n]==flag[n]) return dfs(n-1,flag); else { memset(flag1,0,sizeof(flag1)); flag1[n-1]=1; return dfs(n-1,flag1)+p(2,n-1); } return 0; } int main() { int i; int n,flag[1001]; while(scanf("%d",&n)!=EOF) { memset(flag,0,sizeof(flag)); memset(res,0,sizeof(res)); for(i=1;i<=n;i++) scanf("%d",&array[i]); dfs(n,flag); int xx=0; for(i=1000;i>=1;i--) { if(xx==0&&res[i]==0) continue; xx=1; printf("%d",res[i]); } if(xx==0) printf("0"); printf("\n"); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator