爬楼梯 (大数加法)
Posted qinduanyinghua
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬楼梯 (大数加法)相关的知识,希望对你有一定的参考价值。
时间限制:1秒
空间限制:65536K
在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。
请问计算出你可以采用多少种不同的方式爬完这个楼梯。
请问计算出你可以采用多少种不同的方式爬完这个楼梯。
输入描述:
一个正整数n(n<=100),表示这个楼梯一共有多少阶
输出描述:
一个正整数,表示有多少种不同的方式爬完这个楼梯
输入例子1:
5
输出例子1:
8
思路:大数相加。long long也溢出。
1 #include <iostream> 2 #include <vector> 3 #include <string> 4 using namespace std; 5 string add(string s1, string s2) 6 int len1 = s1.length(), len2 = s2.length(); 7 int maxlen = max(len1, len2) + 1; 8 string res(maxlen, ‘0‘); 9 int flag = 0; 10 int i = len1 - 1, j = len2 - 1, k = maxlen - 1; 11 for (; i >= 0 && j >= 0; i--, j--) 12 int temp = (s1[i] - ‘0‘) + (s2[j] - ‘0‘) + flag; 13 flag = temp / 10; 14 res[k--]= temp % 10 + ‘0‘; 15 16 while (i >= 0) 17 int temp = s1[i--] - ‘0‘ + flag; 18 flag = temp / 10; 19 res[k--] = temp % 10 + ‘0‘; 20 21 while (j >= 0) 22 int temp = s2[j--] - ‘0‘ + flag; 23 flag = temp / 10; 24 res[k--] = temp % 10 + ‘0‘; 25 26 res[k] = flag + ‘0‘; 27 if (flag) 28 return res; 29 else 30 return res.substr(1); 31 32 33 string jumpFloor(int number) 34 vector<string> dp(number + 1, "1"); 35 for (int i = 2; i <= number; i++) 36 dp[i] = add(dp[i - 1], dp[i - 2]); 37 38 return dp[number]; 39 40 41 int main() 42 int n; 43 cin >> n; 44 cout << jumpFloor(n) << endl; 45
以上是关于爬楼梯 (大数加法)的主要内容,如果未能解决你的问题,请参考以下文章