说明
一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房M开始爬到蜂房N,1=<M<N<=100,有多少种爬行路线?
输入格式
输入M,N的值。 (1=<m<n<=100)
输出格式
爬行有多少种路线。
样例
输入数据 1
1 14
输出数据 1
377
AC代码
#include <bits/stdc++.h>
using namespace std;
//高精度求和
string num(string s1,string s2){
string r = "";
int i,len;//len存较长的长度
int a[250] = {0},b[250] = {0},c[250] = {0};
//第一步:将2个字符数组逆序存入2个整数数组
//s1 = "12345";
for(i = 0;i < s1.size();i++){
//0->s1.size()-1 1->s1.size()-2
a[s1.size()-i-1] = s1[i] - '0';
}
for(i = 0;i < s2.size();i++){
b[s2.size()-i-1] = s2[i] - '0';
}
//第二步:逐位相加,逐位进位
//int len = s1.size() > s2.size()?s1.size():s2.size();//三目运算符,替代if else
len = s1.size();
if(s2.size() > s1.size()){
len = s2.size();
}
//加
for(i = 0;i < len;i++){
c[i] = a[i] + b[i];
}
//进位
for(i = 0;i < len;i++){
if(c[i] >= 10){
c[i+1] = c[i+1] + c[i] / 10;
c[i] = c[i] % 10;
}
}
//第三步:逆序输出
if(c[len] != 0){
len++;
}
for(i = len - 1;i>=0;i--){
r = r + (char)(c[i] + 48);
}
return r;
}
int main(){
long long m,n,x,i;
cin>>m>>n;
x = n - m;
string t1,t2,t;
t1 = "1";
t2 = "2";
for(i = 3;i <= x;i++){
t = num(t1,t2);
// cout<<i<<" "<<t<<endl;
t1 = t2;
t2 = t;
}
cout<<t2<<endl;
// cout<<LONG_LONG_MAX<<endl;
return 0;
}