初级守护
大家都知道 Fibonacci 数列吧,�1=1f1=1,�2=1f2=1,�3=2f3=2,�4=3f4=3,……,��=��−1+��−2fn=fn−1+fn−2。
现在问题很简单,输入 �n 和 �m,求 ��mod�fnmodm。
#include<bits/stdc++.h>
using namespace std;
string dp[110];
int a[110],b[110],c[110];
string s(string s1,string s2){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
int al=s1.size(),bl=s2.size(),cl=max(al,bl)+1;
for(int i=1;i<=al;i++) a[i]=s1[al-i]-'0';
for(int i=1;i<=bl;i++) b[i]=s2[bl-i]-'0';
for(int i=1;i<=cl;i++){
c[i]+=a[i]+b[i];
c[i+1]=c[i]/10;
c[i]%=10;
}
while(c[cl]==0&&cl>1){
cl--;
}
string s3;
for(int i=cl;i>=1;i--){
s3+=c[i]+'0';
}
return s3;
}
int main(){
int n;
cin>>n;
dp[1]="1";
dp[2]="1";
for(int i=3;i<=n;i++){
dp[i]=s(dp[i-1],dp[i-2]);
}
cout<<dp[n];
return 0;
}