爬楼梯
爬楼梯
http://www.nowcoder.com/questionTerminal/b178fcef3ed4448c99d7c0297312212d
题解
难度:中等
知识点:大数问题、斐波那契数列
题目剖析:本题很容易理解主要考察了斐波那契数列的知识点。因为只能跳1阶或者2阶,定义n阶有种跳法为f(n),所以f(n)=f(n-1)+f(n-2);如果只是考虑到这点,在计算时会忽略大数的问题,使用int定义则会超出数据范围,所以用字符串解决大数问题。
解决方法
#include <bits/stdc++.h> using namespace std; //大数计算的方法(这里s2>s1) string BigData(string s1, string s2) { string res = ""; int i = s1.size() - 1; int j = s2.size() - 1; int flag = 0; while (i >= 0 || j >= 0) { //因为s2一定大于s1,所以只会s2比s1多一位的可能 if (i < 0) { res = to_string((s2[j] - '0') + flag) + res; flag = 0; } else { int tmp = (s1[i] - '0') + (s2[j] - '0') + flag; flag = tmp / 10; tmp = tmp % 10; res = to_string(tmp) + res; } i--; j--; } //如果最后计算需要进位 if(flag==1) res = '1' + res; return res; } int main() { int n; cin>>n; string a1="1"; string a2="2"; string an=""; if(n<=2) cout<<n; else { for(int i=0;i<n-2;i++) { an=BigData(a1,a2); a1=a2; a2=an; } cout<<an; } return 0; }