3
171
2731
845100400152152934331135470251
1071292029505993517027974728227441735014801995855195223534251
递推公式f[i] = f[i-1] + 2*f[i-2];
不明白的是0的时候为什么输出1,让我WA了好几遍
#include
#include
#include
#include
using namespace std;
const int N = 300;
char a[N][N];
void sum(int x,char s1[],char s2[])
{
int len1=strlen(s1);
int len2=strlen(s2);
int e1[N],e2[N];
memset(e1,0,sizeof(e1));
memset(e2,0,sizeof(e2));
for(int i=0; i
e1[i]=s1[len1-i-1] - '0';
for(int i=0; i
e2[i]=s2[len2-i-1] - '0';
int k=len1;
if(k
k=len2;
for(int i=0; i
{
e1[i]+=e2[i] + e2[i];
if(e1[i]>=10)
{
e1[i+1]+=e1[i]/10;
e1[i]=e1[i]%10;
}
}
int ee=0;
for(int i=N-1; i>=0; i--)
{
if(e1[i]!=0)
{
for(int j=i; j>=0; j--)
a[x][ee++]=e1[j]+'0';
break;
}
}
a[x][ee]='\0';
}
int main()
{
strcpy(a[0],"1");
strcpy(a[1],"1");
strcpy(a[2],"3");
for(int i=3; i<=250; i++)
{
sum(i,a[i-1],a[i-2]);
}
int n;
while(cin>>n)
{
cout<
}
return 0;
}
JAVA 就比较简单了。。。
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
BigInteger []a=new BigInteger [311];
a[0]=BigInteger.valueOf(1);
a[1]=BigInteger.valueOf(1);
a[2]=BigInteger.valueOf(3);
for(int i=3;i<301;i++){
a[i]=a[i-1].add(a[i-2].add(a[i-2]));
}
Scanner cin=new Scanner(System.in);
while(cin.hasNextInt()){
int n=cin.nextInt();
System.out.println(a[n]);
}
cin.close();
}
}