本题是一个非常经典的斐波那契数列问题,也是一个初步的动态规划问题
以下使用了vector进行高精度处理
#include<iostream>
#include<vector>
using namespace std;
vector<vector<int>> dp;
vector<int> add(vector<int> &A,vector<int> &B)
{
vector<int> C;
int temp=0;
for (int i = 0; i < A.size() || i < B.size(); i++)
{
if (i < A.size()) temp += A[i];
if (i < B.size()) temp += B[i];
C.push_back(temp % 10);
temp /= 10;
}
if (temp)
C.push_back(1);
return C;
}
int main()
{
int n;
scanf("%d", &n);
dp.resize(5010);
dp[0].push_back(1);//不可以写dp[0][0]=1,因为你之前没有规定vector[0]的范围,无法访问
dp[1].push_back(1);
for (int i = 2; i < n + 1; i++)
{
dp[i] = add(dp[i - 1], dp[i - 2]);//直接赋值
}
for (int i = dp[n].size() - 1; i >= 0; i--)
{
printf("%d", dp[n][i]);
}
return 0;
}
精度处理