📄 1250(tle).cpp
字号:
#include<stdio.h>
#include<string.h>
#define MAX 10005
void transform(char str[],int result[])
{
int len=strlen(str),i;
memset(result,0,sizeof(int)*MAX);
for(result[0]=len,i=0;i<len;i++) result[len-i]=str[i]-'0';
return;
}
void transback(char str[],int result[]){
int i;
for(i=0;i<result[0];i++)
str[i]=result[result[0]-i]+48;
}
void plus(int operator_1[],int operator_2[],int result[])
{
int sum[MAX],i,len=operator_1[0]>operator_2[0]?operator_1[0]:operator_2[0];
memset(sum,0,sizeof(int)*MAX);
for(i=1;i<=len;i++){
sum[i]+=operator_1[i]+operator_2[i];
if(sum[i]>=10) sum[i]-=10,sum[i+1]++;
}
sum[0]=sum[i]==0?len:len+1;
memcpy(result,sum,sizeof(int)*MAX);
return;
}
void main()
{
int n,i,j;
char s[6][10000];
int nu[6][10000];
while(scanf("%d",&n)!=EOF){
for(i=0;i<6;i++){
memset(s[i],0,sizeof(s[i]));
memset(nu[i],0,sizeof(nu[i]));
}
for(i=1;i<5;i++)
strcpy(s[i],"1");
if(n<=4) printf("1\n");
else{
for(i=5;i<=n;i++){
for(j=1;j<=4;j++){
memset(nu[j],0,sizeof(nu[j]));
transform(s[j],nu[j]);
}
memset(nu[0],0,sizeof(nu[0]));
plus(nu[1],nu[2],nu[0]);
memset(nu[1],0,sizeof(nu[1]));
plus(nu[0],nu[3],nu[1]);
memset(nu[5],0,sizeof(nu[5]));
plus(nu[1],nu[4],nu[5]);
transback(s[5],nu[5]);
for(j=1;j<5;j++)
strcpy(s[j],s[j+1]);
}
printf("%s\n",s[5]);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -