hdu 1715 大菲波数

来源:互联网 发布:数易文化计算法 编辑:程序博客网 时间:2024/06/16 09:20
#include<stdio.h>int a[2000][200]={0};//这里数组开大点就行了,一般不会出现问题 int main(){int n,t;int i,j;a[1][0]=1;a[2][0]=1;a[3][0]=2;a[4][0]=3;for(i=5;i<2000;i++){for(j=0;j<200;j++){a[i][j]+=a[i-1][j]+a[i-2][j];}for(j=0;j<200;j++){if(a[i][j]>10000000){a[i][j+1]+=a[i][j]/10000000;a[i][j]=a[i][j]%10000000;}}}scanf("%d",&t);while(t--){scanf("%d",&n);for(j=199;j>=0;j--){if(a[n][j]!=0)break;}printf("%d",a[n][j]);for(j=j-1;j>=0;j--)printf("%07d",a[n][j]);printf("\n");}return 0;}下面的代码理解起来更加简单
<pre name="code" class="cpp">#include<stdio.h>int a[2000][1000]={0};//本来这里是a[10000][260]的,我改了下,结果这里260要变成500了,考虑下存储的时候会出现问题就行了 int main(){int n,t;int i,j;a[1][0]=1;a[2][0]=1;a[3][0]=2;a[4][0]=3;for(i=5;i<2000;i++){for(j=0;j<1000;j++){a[i][j]+=a[i-1][j]+a[i-2][j];}for(j=0;j<1000;j++){if(a[i][j]>=10){a[i][j+1]+=a[i][j]/10;a[i][j]=a[i][j]%10;}}}scanf("%d",&t);while(t--){scanf("%d",&n);for(j=999;j>=0;j--){if(a[n][j]!=0)break;}printf("%d",a[n][j]);for(j=j-1;j>=0;j--)printf("%d",a[n][j]);printf("\n");}return 0;}



0 0
原创粉丝点击