从m到n,都可以转换为
从1到n-m+1,
f(i) 表示从1到i的走法
f(i)=f(i-1)+f(i-2);
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
struct bign
{
int d[3000];
int len;
bign(){
memset(d, 0, sizeof(d));
len = 0;
}
bign operator +(const bign& a){
bign c;
int carry = 0;
for (int i = 0, j = 0; i < len || i < a.len|| carry; i++){
c.d[c.len++] = (d[i] + a.d[i] + carry)%10;
carry = (d[i] + a.d[i] + carry) / 10;
}
return c;
}
}a,b;
int m, n;
int main()
{
cin >> m >> n;
n = n - m + 1;
a.d[a.len++] = 1;
b.d[b.len++] = 1;
bign res;
for (int i = 3; i <= n; i++){
res = a + b;
a = b;
b = res;
}
for (int i = res.len-1; i >=0; i--){
printf("%d", res.d[i]);
}
}