您的位置:首页 > 其它

poj 2506-递推+高精度

2012-05-21 23:49 239 查看
刚开始一直re,高精度的时候要注意,f
=f[n-1]+2*f[n-2];数组要开到350才够

View Code

#include<stdio.h>
#include<string.h>
#define max(x,y) x>y?x:y
char s[350][105]={"1","1"};
int t1[105];
void add(int n1,int n2)
{
int len1=strlen(s[n1]);
int len2=strlen(s[n2]);
int lenmax=max(len1,len2);
t1[0]=0;
t1[1]=0;
int i,j,k;
lenmax++;
for(i=len1-1,j=len2-1,k=lenmax;i>=0&&j>=0;i--,j--,k--)
t1[k]=s[n1][i]-'0'+2*(s[n2][j]-'0');
if(j<0)
{
while(i>=0)
{
t1[k]=s[n1][i]-'0';
i--;
k--;
}
}
for(k=lenmax;k>=1;k--)
{
t1[k-1]+=(t1[k]/10);
t1[k]%=10;
}
if(t1[0])
{
for(i=0;i<=lenmax;i++)
s[n1+1][i]=t1[i]+'0';
s[n1+1][lenmax+1]='\0';
}
else
{
if(t1[1])
{
for(i=1;i<=lenmax;i++)
s[n1+1][i-1]=t1[i]+'0';
s[n1+1][lenmax]='\0';
}
else if(t1[2])
{
for(i=2;i<=lenmax;i++)
s[n1+1][i-2]=t1[i]+'0';
s[n1+1][lenmax-1]='\0';
}
}
}
int main()
{
int n;
int i,j,k;
for(i=1;i<=340;i++)
add(i,i-1);
while(scanf("%d",&n)!=EOF)
{
printf("%s\n",s
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: