其实这道题目就是考查大数的乘法和加减法而已。。。
这道题目的规律可以找出来:
if(n&1)
{
a[n]=2*a[n-1]-1;
}
else
a[n]=2*a[n-1]+1;
我的ac代码:
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
int ans[1001][501];
void mut2(int n)
{
int i,t=0,temp;
for(i=0;i<=500;i++)
{
ans[n][i]=2*ans[n-1][i];
}
for(i=500;i>=0;i--)
{
temp=ans[n][i]+t;
ans[n][i]=(ans[n][i]+t)%10;
t=temp/10;
}
}
void done(int n)
{
int t=0,i,temp;
if(n%2)
{
ans[n][500]=ans[n][500]-1;
for(i=500;i>=0;i--)
{
ans[n][i]-=t;
if(ans[n][i]<0)
{
ans[n][i]=ans[n][i]+10;
t=1;
}
else
{
t=0;
}
}
}
else
{
ans[n][500]++;
for(i=500;i>=0;i--)
{
ans[n][i]+=t;
if(ans[n][i]+t>=10)
{
ans[n][i]=ans[n][i]-10;
t=1;
}
else
{
t=0;
}
}
}
}
int main()
{
int n,i,j;
memset(ans,0,sizeof(ans));
ans[2][500]=1;
ans[3][500]=1;
for(i=4;i<=1000;i++)
{
mut2(i);
done(i);
}
while(scanf("%d",&n)!=EOF)
{
if(n==1)
{
printf("0\n");
}
else
{
for(i=0;i<=500;i++)
{
if(ans[n][i])
{
j=i;
break;
}
}
for(i=j;i<=500;i++)
{
printf("%d",ans[n][i]);
}
printf("\n");
}
}
return 0;
}