前言
大数是一个基本操作,用于大型数据,本代码以斐布纳契数列(兔子繁殖)为例,不了解的自行百度
数据结构
建立一个二维数组备用
int arr[1001][1001];//备用
思想基础
用字符型代替整型,扩充范围
核心代码
void fld() {
int s, n = 0;//s表示数字,n表示进位
memset(arr, 0, sizeof(arr));
arr[1][1] = 1;//第一位为1
arr[2][1] = 1;//第二位为1
for (int i = 3; i <= 1000; i++) {//从第三位开始遍历
for (int j = 1; j <= 1000; j++) {//位数移动
s = arr[i - 2][j] + arr[i - 1][j] + n;//计算当前位的值
arr[i][j] = s % 10;
n = s / 10//判断是否进位;
}
}
}
核心在于进位制度,通过n完成进位
完整代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int arr[1001][1001];
void fld() {
int s, n = 0;
memset(arr, 0, sizeof(arr));
arr[1][1] = 1;
arr[2][1] = 1;
for (int i = 3; i <= 1000; i++) {
for (int j = 1; j <= 1000; j++) {
s = arr[i - 2][j] + arr[i - 1][j] + n;
arr[i][j] = s % 10;
n = s / 10;
}
}
}
int main()
{
int N;
fld();
cin >> N;
while (N--) {
int t, m;
cin >> t;
for (int i = 1000; i >= 0; i--)
if (arr[t][i])
m = i;
for (int i = m; i > 0; i--)
cout << arr[t][i];
cout << endl;
}
return 0;
}
总结
大数问题就是补一个遗憾,其实没啥技术含量,就这样。