这两个题目都属于高精度问题,只是递推公式不同,nyoj上的题目用long long 就可以过,但是题型相似,做法也一样
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 8761 | Accepted: 4209 |
Description
Input
Output
Sample Input
2 8 12 100 200
Sample Output
3 171 2731 845100400152152934331135470251 1071292029505993517027974728227441735014801995855195223534251
#include <set> #include <queue> #include <cmath> #include <cstdio> #include <climits> #include <cstring> #include <iostream> #define INF LLONG_MAX #define ll long long using namespace std; int a[300][1000]; int main(){ int i,j,k=0,n; a[0][0]=1; a[1][0]=1; a[2][0]=3; for(i=3;i<=250;i++){ for(j=0;j<=900;j++){ k+=(a[i-2][j])*2+a[i-1][j]; a[i][j]=k%10; k/=10; } } while(~scanf("%d",&n)){ int i; for(i=900;i>=0;i--){ if(a[n][i]!=0) break; } for(;i>=0;i--){ printf("%d",a[n][i]); } printf("\n"); } return 0; }
1 2 6
1 2 13
#include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define INF 0x3f3f3f using namespace std; int a[55][12]; int main(){ int i,j,n,k=0; a[1][0]=1; a[2][0]=2; for(i=3;i<=50;i++){ for(j=0;j<=11;j++){ k+=(a[i-2][j]+a[i-1][j]); a[i][j]=k%10; k/=10; } } while(~scanf("%d",&n)){ int flag=0; for(i=11;i>=0;i--){ if(a[n][i]) flag+=1; while(flag&&i>=0) printf("%d",a[n][i--]); } printf("\n"); } return 0; }