/*
复习大数问题;
*/
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <string> #include <iomanip> using namespace std; int num[1005][55]; void add(int *a,int *b,int *c) { int p = 0; int i; int minnum = (a[0]<b[0])?a[0]:b[0]; for(i = 1; i <= minnum; i++) { c[i] = (a[i]+b[i]+p)%10000; p = (a[i]+b[i])/10000; } if(a[0]>b[0]) { for( ; i <= a[0]; i++) { c[i] = (a[i] + p)%10000; p = (a[i] + p)/10000; } c[0] = a[0]; if(p) { c[i] = p; c[0]++; } } else if(a[0]=b[0]) { c[0] = a[0]; if(p) { c[i] = p; c[0]++; } } else if(a[0]<b[0]) { c[0] = b[0]; for( ; i <= b[0]; i++) { c[i] = (b[i] + p)%10000; p = (b[i] + p)/10000; } if(p) { c[i] = p; c[0]++; } } } void prin_num(int *a) { printf("%d",a[a[0]]); if(a[0] > 1) for(int i = a[0]-1; i >= 1; i--) printf("%04d",a[i]); printf("\n"); } void set() { num[1][0] = 1,num[1][1] = 1; num[2][0] = 1,num[2][1] = 1; for(int i = 3; i <= 1000; i++) { add(num[i-1],num[i-2],num[i]); } } int main(int argc,char *argv[]) { set(); int n,p; scanf("%d",&n); while(n--) { scanf("%d",&p); prin_num(num[p]); } return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。