您的位置:首页 > 其它

杭电1250

2016-03-06 13:57 288 查看
题目描述:

A Fibonacci sequence is calculated by adding the previous two members the sequence, with the first two members being both 1.

F(1) = 1, F(2) = 1, F(3) = 1,F(4) = 1, F(n>4) = F(n - 1) + F(n-2) + F(n-3) + F(n-4)

Your task is to take a number as input, and print that Fibonacci number.

又是一道大数相加的题目,直接写了一串代码:

#include<stdio.h>
int a[9005][2600]={0};
int b[9005];
int main(){
int i,j,k,q,flag,t;
a[0][0]=1;
a[1][0]=1;
a[2][0]=1;
a[3][0]=1;
b[0]=1;b[1]=1;b[2]=1;b[3]=1;
for(i=4;i<9002;i++){
int m=b[i-1];
flag=0;
for(j=0;j<m;j++){
t=a[i-4][j]+a[i-3][j]+a[i-2][j]+a[i-1][j]+flag;
a[i][j]=t%10;flag=t/10;
}
if(flag) a[i][m++]=flag;
b[i]=m;
}
//printf("%d\n",b[9000]);
while(scanf("%d",&k)!=EOF){
for(q=2598;q>=0;q--){
if(a[k-1][q]!=0) break;
}
for(;q>=0;q--)
printf("%d",a[k-1][q]);
printf("\n");
}
return 0;
}结果因为申请内存过多Memory Limited Exceed了,Orz,接下来是AC代码:
#include<stdio.h>
#include<string.h>
#define N 10000 //N很关键,N=10000或者20000都可以AC,N取得过小会错。
int str
[260];
int main(){
memset(str,0,sizeof(str));
str[1][0]=1;
str[2][0]=1;
str[3][0]=1;
str[4][0]=1;
int i,j,ans=0,c,n;
for(i=5;i<N;i++){
for(j=0,c=0;j<260;j++){
ans=str[i-1][j]+str[i-2][j]+str[i-3][j]+str[i-4][j]+c;
c=ans/100000000;
str[i][j]=ans%100000000; //每一个数组存8位数字,c来控制是否进位。
}
}
while(scanf("%d",&n)!=EOF){
j=259;
while(!str
[j]) //将首0清除。
j--;
printf("%d",str
[j]);
for(i=j-1;i>=0;i--)
printf("%08d",str
[i]);//每8位输出,不足8位自动补0;
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: