UVa:10359 Tiling
发布时间:2020-12-14 03:54:57 所属栏目:大数据 来源:网络整理
导读:可以推出f[i]=f[i-1]+2*f[i-2] 需要用到大数加法。 #include iostream#include cstdlib#include cstdio#include cstring#include algorithm#define MAXN 105using namespace std;void BigAdd(char a[],char b[],char back[]){ int p=0,up=0; char c[MAXN]= {
可以推出f[i]=f[i-1]+2*f[i-2] 需要用到大数加法。 #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <algorithm> #define MAXN 105 using namespace std; void BigAdd(char a[],char b[],char back[]) { int p=0,up=0; char c[MAXN]= {0}; for(int i=strlen(a)-1,j=strlen(b)-1; i>=0||j>=0; --i,--j) { int x,y,z; if(i<0) x=0; else x=a[i]-'0'; if(j<0) y=0; else y=b[j]-'0'; z=x+y+up; if(z>9) up=1; else up=0; c[p++]=z%10+'0'; } if(up) c[p++]='1'; c[p]=0; int q=0; for(int i=p-1; i>=0; --i) back[q++]=c[i]; back[q]=0; } char f[255][MAXN]; int main() { strcpy(f[0],"1"); strcpy(f[1],"1"); for(int i=2; i<=250; ++i) { char tmp[MAXN]; BigAdd(f[i-2],f[i-2],tmp); BigAdd(f[i-1],tmp,f[i]); } int n; while(scanf("%d",&n)!=EOF) printf("%sn",f[n]); return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |