hdu 1250 高精度加法(类斐波那契)

来源:互联网 发布:淘宝分期付款买电脑 编辑:程序博客网 时间:2024/06/08 08:43
题目大意:首先题目给出一个十分相似于斐波那契数列的一个数列规则,在这个数列中,前四个数字为1,当下标大于4时,则此数等于前面四个数之和。因为题目要求是答案不超过2000位,所以很容易发现是考察高精度的问题。本来这种斐波那契的题目都是打表来做,但是刚开始感觉无从下手,如果不打表感觉也会超时,后来想到用二维数组f【m】【n】,代表第m个数的第n位的数字。额,感觉也是用了打表,然后就是普通 的高精度了。
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;#define maxn 2100char f[10005][maxn];int main(){int n;    memset(f,0,sizeof(f));    f[1][2010]=1;    f[2][2010]=1;    f[3][2010]=1;    f[4][2010]=1;    int i=5,p=2010;while(f[i-1][5]<=1){for(int j=2010;j>=0;j--){f[i][j]=f[i-1][j]+f[i-2][j]+f[i-3][j]+f[i-4][j];}for(int j=2010;j>=p;j--){          int a=f[i][j];          f[i][j-1]+=a/10;          f[i][j]=a%10;}if(f[i][p-1]>0) p--;i++;} int t;while((scanf("%d",&n))!=EOF){for(int i=0;i<=2010;i++){if(f[n][i]+'0'!='0'){ t=i;break;} }   for(int i=t;i<=2010;i++){   printf("%c",f[n][i]+'0');   }    printf("\n");}return 0;} 

0 0
原创粉丝点击