适合斐波那契数列,及爬楼梯问题。
F(x) =
0 | 0 |
1 | 1 |
2 | 2 |
.... | .... |
n | f(n-1)+f(n-2) |
#include <iostream>
using namespace std;
int a[5001][5001];//创建一个全局数组,这样每一次循环都会记录相应的值
int len = 1;//我们是从n = 0开始 ,0 为一位数,
void j(int d);
int main()
{
a[1][1] = 1;
a[2][1] = 1;
int n;
cin >> n;
if (n > 2)
{
for (int i = 3; i <= n; i++)
{
j(i);
}
}
for(int i = len;i > 0;i--)
{
cout << a[n][i];
}
}
void j(int d )//标准的高精度加法
{
for(int i = 1;i <= len;i++)
{
a[d][i] = a[d-1][i] +a[d - 2][i];
}
for(int i = 1;i <= len;i++)
{
if(a[d][i] >= 10)
{
a[d][i+1] += a[d][i]/10;
a[d][i] = a[d][i]%10;
if(a[d][len+1])
len++;
}
}
}
[点击并拖拽以移动]
对代码进行一点解释,创建一个二维数组a[5001][5001]
第一个5001代表项数,5001表示最大可以容纳数。
第二个5001表示最大位数容纳量。
结合列子讲解一下
如:
a[1][1] = 1,表示这是第一项,只有一位(个位)
本人为大一菜鸡一枚,发文章也只是为了给自己看。
欢迎友好的讨论!
--------2022.1.22