爬楼梯 (大数加法)

匿名 (未验证) 提交于 2019-12-02 23:57:01

时间限制: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 }

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!