初级:
#include <iostream>
using namespace std;
int main() {
int n;
scanf("%d", &n);
long long dp[1001];
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= n; i++) {
dp[i] = dp[i-1] + dp[i-2];
}
printf("%lld\n", dp[n]);
return 0;
}
终极:
#include <iostream>
#include <vector>
using namespace std;
string addStrings(const string& num1, const string& num2) {
string result;
int carry = 0;
int i = num1.size() - 1, j = num2.size() - 1;
while (i >= 0 || j >= 0 || carry > 0) {
int x = i >= 0 ? num1[i--] - '0' : 0;
int y = j >= 0 ? num2[j--] - '0' : 0;
int sum = x + y + carry;
carry = sum / 10;
sum %= 10;
result.insert(result.begin(), sum + '0');
}
return result;
}
int main() {
int n;
cin >> n;
string dp[1001];
dp[1] = "1";
dp[2] = "2";
for (int i = 3; i <= n; i++) {
dp[i] = addStrings(dp[i-1], dp[i-2]);
}
cout << dp[n] << endl;
return 0;
}