Description
一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房M开始爬到蜂房N,M<N,有多少种爬行路线?
Input
输入M,N的值。
Output
爬行有多少种路线。
Samples
Input 复制
1 14
Output
377
Hint
对于100%的数据 M,N≤1000
#include <bits/stdc++.h>
using namespace std;
char a[1010][10000];//存储路线数
int main()
{
int i,n,m;
int jw,t;//jw为进位
cin>>m>>n;
memset(a,'\0',sizeof(a));
jw=0;
a[0][0]='0',a[1][0]='1',a[2][0]='1',a[3][0]='2';
for(int j=4;j<=n-m+1;j++){
for(i=0;i<strlen(a[j-1])||i<strlen(a[j-2]);i++){ //模拟大数加法
if(i<strlen(a[j-1])&&i<strlen(a[j-2]))
t=(a[j-1][i]-'0'+a[j-2][i]-'0'+jw);//数组存储得是数字的ascii码
else
t=(a[j-1][i]-'0'+a[j-2][i]+jw);/*防止a[j-2]长度小于a[j-1]时,a[j-2][i]为'\0',不能再去减'0';*/
a[j][i]=t%10+'0';
jw=t/10;
}
if(jw!=0){
a[j][i]=jw+'0';
jw=0;
}
}
for(int p=strlen(a[n-m+1])-1;p>=0;p--)//逆序输出
cout<<a[n-m+1][p];
cout<<endl;
return 0;
}