有点小难。做了20分钟。
代码有点长,但肯定对。
问题描述
有一种数列,它的前 10 项的值分别为:1 2 5 12 29 70 169 408 985 2378,这个数列被称为 Pell 数列,请问该数列的第 n 项的值是多少?(n≤1000)
增长速度很快,要用字符串。
输入
一个整数 n 。
输出
第 n 项的值。
样例
输入
10
输出
2378
编辑代码
语言 C++
代码:
#include <bits/stdc++.h>
#include<string>
#include<algorithm>
using namespace std;
string sh(string s,string s1){
int i,a[32768]={},b[32768]={},c[32768]={},t=0,f,e,g,h;
string m;
e=s.size();
f=s1.size();
h=max(e,f);
for(i=0;i<=e-1;i++){
a[i]=s[e-i-1]-'0';
}
for(i=0;i<=f-1;i++){
b[i]=s1[f-i-1]-'0';
}
for(i=0;i<=h-1;i++){
c[i]=(a[i]+b[i]+t)%10;
t=(a[i]+b[i]+t)/10;
}
if(t==1){
m="1";
}
for(i=h-1;i>=0;i--){
m+=char(c[i]+'0');
}
return m;
}
int main(){
int n,i;
cin>>n;
string t="1",t1="2",s="";
for(i=3;i<=n;i++){
s=sh(sh(t1,t1),t);
t=t1;
t1=s;
}
if(n==1){
cout<<1;
}
if(n==2){
cout<<2;
}
if(n>=3){
cout<<s;
}
}