先跟大家说一下,最近我可能没有时间去写题解了,有可能一天一道,有可能一天都不发,请大家见谅!我现在也没有太多的时间去发这题的题解了,只能说看看明天行不行,今天就先发代码吧,明天有时间再做解析;
有一种数列,它的前 10 项的值分别为: 1 2 5 12 29 70 169 408 985 2378 ,这个数列被称为 Pell 数列,请问该数列的第 n 项的值是多少?( n<=1000 )
#include<bits/stdc++.h>
using namespace std;
string he(string s1,string s2){
int a[1001]={0},b[1001]={0},c[1001]={0};
string r;
int x1=s1.size(),x2=s2.size(),i,k;
for(i=0;i<x1;i++)a[i]=s1[x1-i-1]-'0';
for(i=0;i<x2;i++){
b[i]=s2[x2-i-1]-'0';
}
k=x1;
if(x2>x1) k=x2;
for(i=0;i<k;i++)c[i]=a[i]+b[i];
for(i=0;i<k;i++){
if(c[i]>=10){
c[i+1]=c[i+1]+c[i]/10;
c[i]=c[i]%10;
}
}
if(c[k]!=0)k++;
char f;
for(i=k-1;i>=0;i--){
f=c[i]+'0';
r=r+f;
}
return r;
}
string cheng(string s){
string r;
int a[1100]={0},i,x=s.size(),k;
for(i=0;i<x;i++)a[i]=s[x-i-1]-'0';
k=x;
for(i=0;i<x;i++)a[i]=a[i]*2;
for(i=0;i<x;i++){
if(a[i]>=10){
a[i+1]=a[i+1]+a[i]/10;
a[i]=a[i]%10;
}
}
if(a[k]!=0)k++;
char f;
for(i=k-1;i>=0;i--){
f=a[i]+'0';
r=r+f;
}
return r;
}
int main(){
string x,y,z;
int n;
cin>>n;
x="1";
y="2";
for(int i=3;i<=n;i++){
z=he(cheng(y),x);
x=y;
y=z;
}
if(n==1)cout<<x;
else if(n==2)cout<<y;
else cout<<z;
return 0;
}
Pell数列第n项值的求解问题
1359

被折叠的 条评论
为什么被折叠?



