hdu 1715 大菲波数
#include<stdio.h> #include<vector> using namespace std; #define N 1010 vector<int>a[N]; int fb() { int i,j,k; int jw; a[1].push_back(1); a[2].push_back(1); for(i=3;i<N;i++) { jw=0; for(j=0,k=0;k<a[i-2].size();j++,k++) { //a[i][j]+=jw; int t=a[i-1][j]+a[i-2][k]+jw; jw=t/10; if(jw) a[i].push_back(t%10); else a[i].push_back(t); } for(;j<a[i-1].size();j++) { int t=a[i-1][j]+jw; jw=t/10; if(jw) a[i].push_back(t%10); else a[i].push_back(t); } if(jw) { a[i].push_back(jw); } } return 0; } int main() { int _case,n; fb(); scanf("%d",&_case); while(_case--) { scanf("%d",&n); for(int i=a[n].size()-1;i>=0;i--) printf("%d",a[n][i]); printf("\n"); } return 0; }
学习:
STL中vector使用下标访问数组元素是,只能访问到vector动态申请过的空间:
使用char型数组时,注意‘\0’的ASCⅡ码为0,即数组的读入结束符;
错误代码:
#include<stdio.h> #include<string.h> #define N 50 char a[N][1000]; int fb() { int i,j,k; int jw; a[1][0]=1; a[2][0]=1; for(i=3;i<N;i++) { jw=0; for(j=0,k=0;k<strlen(a[i-2]);j++,k++) { //a[i][j]+=jw; a[i][j]=a[i-1][j]+a[i-2][k]+jw; jw=a[i][j]/10; if(jw) { a[i][j]%=10; } printf("%d ",a[i][j]); } for(;j<strlen(a[i-1]);j++) { a[i][j]=a[i-1][j]+jw; jw=a[i][j]/10; if(jw) { a[i][j]%=10; } } if(jw) { a[i][j++]=jw; } for(int k=strlen(a[i])-1;k>=0;k--) printf("#%d",a[i][k]); printf("\n"); } return 0; } int main() { int _case,n; fb(); scanf("%d",&_case); while(_case--) { scanf("%d",&n); for(int i=strlen(a[n])-1;i>=0;i--) printf("%d",a[n][i]); printf("\n"); } return 0; }